Я использую этот метод для входа в систему:
Код: Выделить всё
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;
}
}
- обеспечить useauthentication () и useauthorization () в правильном порядке в программе. RevalidatingIdentityAuthenticationStateProvider
- Параметры cookie устанавливаются через ConfigureApplicationCookie , чтобы иметь/как путь входа в систему.
- Проверено, что пользователь. PasswordSignInasync (...) вместо этого - та же проблема.
- Почему не значит, что нет signasync (пользователь, iSpersistent: false) with? Специальное требование использования его внутри компонентов сервера Blazor? 9
- Blazor Server (не веб -сборка)
- Ядро структуры предприятия с Postgresql
- Identity: Addientity ()
Код: Выделить всё
public static async Task Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// MudBlazor
builder.Services.AddMudServices();
builder.Services.AddScoped();
// Razor i Blazor
builder.Services.AddRazorComponents().AddInteractiveServerComponents();
builder.Services.AddServerSideBlazor().AddCircuitOptions(options =>
{
options.DetailedErrors = true;
});
builder.Services.AddHttpClient();
// DBContext
builder.Services.AddDbContext(options =>
options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection")));
// Identity
builder.Services.AddIdentity(options =>
{
options.Password.RequireDigit = false;
options.Password.RequiredLength = 8;
options.Password.RequireLowercase = false;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = false;
options.SignIn.RequireConfirmedAccount = false;
options.SignIn.RequireConfirmedEmail = false;
options.SignIn.RequireConfirmedPhoneNumber = false;
})
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
builder.Services.AddHttpContextAccessor();
builder.Services.AddAuthorization();
builder.Services.AddScoped();
builder.Services.AddRazorComponents();
builder.Services.AddRazorPages();
builder.Services.ConfigureApplicationCookie(options =>
{
options.LoginPath = "/";
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseAntiforgery();
app.MapStaticAssets();
app.MapRazorPages();
app.MapRazorComponents()
.AddInteractiveServerRenderMode();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
var roleManager = services.GetRequiredService();
var userManager = services.GetRequiredService();
string[] roles = { "SuperAdmin", "CompanyAdmin", "User" };
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();
string userName = "admin2";
string email = "admin2@rego.local";
string password = "Admin123!";
string roleName = "SuperAdmin";
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 user = new ApplicationUser
{
UserName = userName,
Email = email,
EmailConfirmed = true,
PhoneNumberConfirmed = true,
LockoutEnabled = false,
MustChangePassword = true,
IsInitialAdmin = false,
CompanyId = null
};
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}");
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... ogin-cooki