Я строю приложение Blazor Server (.net 9, Identity + Entity Framework Core + Mudblazor). У меня есть пользовательская форма входа в систему, и я хочу аутентифицировать пользователя вручную, используя SignInManager .
Я использую этот метод для входа в систему:
private async Task RegoLogin()
{
isBusy = true;
LoginResultRego = true;
try
{
// Try to find the user by email or username
ApplicationUser user = RegoBenutzer.Contains('@')
? await UserManager.FindByEmailAsync(RegoBenutzer)
: await UserManager.FindByNameAsync(RegoBenutzer);
if (user == null)
{
Console.WriteLine("❌ User does not exist.");
LoginResultRego = false;
return;
}
// Step 1: Check if the password is valid (does NOT create authentication cookie)
var result = await SignInManager.CheckPasswordSignInAsync(user, RegoKennwort, lockoutOnFailure: false);
if (result.Succeeded)
{
// Step 2: Perform the actual sign-in (this creates the auth cookie)
await SignInManager.SignInAsync(user, isPersistent: false);
// Step 3: Optionally store user in shared state (if needed)
SharedDataService.LoggedInUser = user;
// Step 4: Conditional redirect
if (user.MustChangePassword)
{
Navigation.NavigateTo("/change-password", forceLoad: true);
}
else
{
Navigation.NavigateTo("/dashboard", forceLoad: true);
}
}
else
{
Console.WriteLine("❌ Invalid login attempt.");
Console.WriteLine($"🔎 Details: IsLockedOut={result.IsLockedOut}, IsNotAllowed={result.IsNotAllowed}, Requires2FA={result.RequiresTwoFactor}");
LoginResultRego = false;
}
}
catch (Exception ex)
{
Console.WriteLine($"❌ Exception occurred during login: {ex.Message}");
LoginResultRego = false;
}
finally
{
isBusy = false;
}
}
CheckPassWordSignInasync () возвращает effered = true , поэтому учетные данные действительны. Страница. Похоже, что в браке не записано ни одно авто, то что я пробовал:
обеспечить useauthentication () и useauthorization () в правильном порядке в программе. RevalidatingIdentityAuthenticationStateProvider
Параметры cookie устанавливаются через ConfigureApplicationCookie , чтобы иметь/как путь входа в систему.
Проверено, что пользователь. PasswordSignInasync (...) вместо этого - та же проблема.
Вопросы
Почему не значит, что нет signasync (пользователь, iSpersistent: false) with? Специальное требование использования его внутри компонентов сервера Blazor? 9
Я строю приложение Blazor Server (.net 9, Identity + Entity Framework Core + Mudblazor). У меня есть пользовательская форма входа в систему, и я хочу аутентифицировать пользователя вручную, используя SignInManager . Я использую этот метод для входа в систему: [code]private async Task RegoLogin() { isBusy = true; LoginResultRego = true;
try { // Try to find the user by email or username ApplicationUser user = RegoBenutzer.Contains('@') ? await UserManager.FindByEmailAsync(RegoBenutzer) : await UserManager.FindByNameAsync(RegoBenutzer);
if (user == null) { Console.WriteLine("❌ User does not exist."); LoginResultRego = false; return; }
// Step 1: Check if the password is valid (does NOT create authentication cookie) var result = await SignInManager.CheckPasswordSignInAsync(user, RegoKennwort, lockoutOnFailure: false);
if (result.Succeeded) { // Step 2: Perform the actual sign-in (this creates the auth cookie) await SignInManager.SignInAsync(user, isPersistent: false);
// Step 3: Optionally store user in shared state (if needed) SharedDataService.LoggedInUser = user;
// Step 4: Conditional redirect if (user.MustChangePassword) { Navigation.NavigateTo("/change-password", forceLoad: true); } else { Navigation.NavigateTo("/dashboard", forceLoad: true); } } else { Console.WriteLine("❌ Invalid login attempt."); Console.WriteLine($"🔎 Details: IsLockedOut={result.IsLockedOut}, IsNotAllowed={result.IsNotAllowed}, Requires2FA={result.RequiresTwoFactor}"); LoginResultRego = false; } } catch (Exception ex) { Console.WriteLine($"❌ Exception occurred during login: {ex.Message}"); LoginResultRego = false; } finally { isBusy = false; } } [/code] ✅ CheckPassWordSignInasync () возвращает effered = true , поэтому учетные данные действительны. Страница. Похоже, что в браке не записано ни одно авто, то что я пробовал: [list] [*] обеспечить useauthentication () и useauthorization () в правильном порядке в программе. RevalidatingIdentityAuthenticationStateProvider
[*] Параметры cookie устанавливаются через ConfigureApplicationCookie , чтобы иметь/как путь входа в систему. [*] Проверено, что пользователь. PasswordSignInasync (...) вместо этого - та же проблема. [/list] [b] Вопросы [/b] [list] [*] Почему не значит, что нет signasync (пользователь, iSpersistent: false) with? Специальное требование использования его внутри компонентов сервера Blazor? 9 [*] Blazor Server (не веб -сборка) [*] Ядро структуры предприятия с Postgresql [*] Identity: Addientity () [/list] hier - это программа.[code] public static async Task Main(string[] args) { var builder = WebApplication.CreateBuilder(args);
foreach (var role in roles) { if (!await roleManager.RoleExistsAsync(role)) { await roleManager.CreateAsync(new IdentityRole(role)); } }
await SeedTestUser(services); }
await app.RunAsync(); }
public static async Task SeedTestUser(IServiceProvider services) { var userManager = services.GetRequiredService(); var roleManager = services.GetRequiredService();
if (!await roleManager.RoleExistsAsync(roleName)) { await roleManager.CreateAsync(new IdentityRole(roleName)); }
var existingUser = await userManager.FindByNameAsync(userName); if (existingUser != null) { var deleteResult = await userManager.DeleteAsync(existingUser); if (!deleteResult.Succeeded) { Console.WriteLine("❌ Nie udało się usunąć starego użytkownika:"); foreach (var e in deleteResult.Errors) Console.WriteLine($" - {e.Description}"); return; } else { Console.WriteLine("ℹ️ Usunięto poprzedniego użytkownika admin2."); } }
var result = await userManager.CreateAsync(user, password); if (result.Succeeded) { await userManager.AddToRoleAsync(user, roleName); Console.WriteLine("✅ Nowy użytkownik admin2 został utworzony i przypisany do roli SuperAdmin."); } else { Console.WriteLine("❌ Błąd przy tworzeniu użytkownika:"); foreach (var e in result.Errors) Console.WriteLine($" - {e.Description}"); } } [/code] Спасибо за вашу помощь!