Microsoft Identity Blazor .NET 8 Server (fehlgeschlagene Anmeldung)
Posted: 21 May 2025, 14:15
Ich habe eine Blazor .NET 8 Server -Anwendung mit dem Rendermodus pro Komponente. Für die Authentifizierung verwende ich eine ASP.NET -Kernidentität. Wenn ich mit der Anwendung startete, erstelle ich in Program.cs einen Administrator, wenn er noch nicht vorhanden ist. Dies funktioniert perfekt und ich kann mich auch damit anmelden. < /P>
-Klasse aus der Microsoft -Identität nicht debuggen kann?
Code: Select all
using (var scope = app.Services.CreateScope())
{
var roleManager = scope.ServiceProvider.GetRequiredService();
var userManager = scope.ServiceProvider.GetRequiredService();
var roles = new[] { "Admin", "User" };
foreach (var role in roles)
{
if (!await roleManager.RoleExistsAsync(role))
{
await roleManager.CreateAsync(new IdentityRole(role));
}
}
var userEmail = "email";
var userPassword = "pwd";
var user = await userManager.FindByEmailAsync(userEmail);
if (user == null)
{
var newUser = new SvptUser
{
UserName = userEmail,
Email = userEmail,
EmailConfirmed = true
};
var result = await userManager.CreateAsync(newUser, userPassword);
if (result.Succeeded)
{
await userManager.AddToRoleAsync(newUser, roles.First());
}
else
{
foreach (var error in result.Errors)
{
Console.WriteLine($"Error creating specific admin: {error.Description}");
}
}
}
}
< /code>
Später im Code habe ich einen Dienst für das Admin -Dashboard erstellt. Dies ermöglicht es dem Administrator, Kunden über das Dashboard zu erstellen, und sie erhalten eine E -Mail mit ihren Anmeldedaten. < /P>
private async void SendInvitation()
{
if (!string.IsNullOrWhiteSpace(NewCustomer.Name) && !string.IsNullOrWhiteSpace(NewCustomer.Email))
{
var parts = NewCustomer.Name.Trim()
.ToLower()
.Split(' ', StringSplitOptions.RemoveEmptyEntries);
var validUserName = string.Join(".", parts);
var svptUser = new SvptUser
{
UserName = validUserName,
Email = NewCustomer.Email,
PhoneNumber = NewCustomer.Number,
};
var success = await userService.CreateNewSvptUser(svptUser);
if (!success)
{
ErrorMessage = "Kunde konnte nicht hinzugefügt werden!";
StateHasChanged();
}
else
{
Customers.Add(new DashboardCustomerViewModel
{
Email = svptUser.Email,
HasSubmittedFeedback = svptUser.HasSubmittedFeedback,
Name = svptUser.UserName ?? string.Empty,
Roles = new List()
});
ShowAddForm = false;
StateHasChanged();
}
}
else
{
ErrorMessage = "Name und Emails sind pflicht!";
StateHasChanged();
}
}
public async Task CreateNewSvptUser(SvptUser user)
{
var alreadyExists = await _userManager.FindByEmailAsync(user.Email ?? string.Empty);
if (alreadyExists != null)
{
return false;
}
try
{
var password = GenerateSecurePassword();
user.EmailConfirmed = true;
var result = await _userManager.CreateAsync(user, password);
var roleresult = await _userManager.AddToRoleAsync(user, userRole);
if (!result.Succeeded && !roleresult.Succeeded)
{
foreach (var error in result.Errors)
{
Console.WriteLine($"{error.Code}, {error.Description}");
};
return result.Succeeded;
}
var successMail = await _emailService.SendEmailAsync(
user.Email,
"Einladung Svpt Nutrition",
user.UserName,
user.Email,
password);
if (!successMail)
{
await _userManager.DeleteAsync(user);
return false;
}
return result.Succeeded;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
}
private static string GenerateSecurePassword(int length = 12)
{
const string uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const string lowercase = "abcdefghijklmnopqrstuvwxyz";
const string digits = "0123456789";
const string special = "!@#$%^&*()_-+=?";
var random = new Random();
var passwordChars = new List
{
uppercase[random.Next(uppercase.Length)],
lowercase[random.Next(lowercase.Length)],
digits[random.Next(digits.Length)],
special[random.Next(special.Length)]
};
string allChars = uppercase + lowercase + digits + special;
for (int i = passwordChars.Count; i < length; i++)
{
passwordChars.Add(allChars[random.Next(allChars.Length)]);
}
return new string(passwordChars.OrderBy(_ => random.Next()).ToArray());
}
< /code>
Wenn ich dann versuche, mich mit diesen neuen Anmeldedetails anzumelden, funktioniert es nicht. Ich mache das Ganze im Inkognito -Modus des Browsers. Der Fehler, da ich die SignInManager