Ich habe eine Blazor .NET 8 Server -Anwendung mit dem Rendermodus pro Komponente. Zur Authentifizierung verwende ich Microsoft Identity. Wenn ich die Anwendung starten, erstelle ich in Program.cs einen Administrator, wenn er noch nicht vorhanden ist. Dies funktioniert perfekt und ich kann mich auch damit anmelden. < /P>
using (var scope = app.Services.CreateScope())
< /code>
{
var rolemanager = scope.serviceProvider.getRequiredService ();
var userManager = 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>
} < /p>
Im späteren 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 Inkognitor -Modus des Browsers. Weiß jemand, warum dieser Fehler auftritt oder wie ich den Fehler finden kann, da ich die SigninManager -Klasse nicht von Microsoft Identity debuggen kann?
Microsoft Identity Blazor .NET 8 Server (fehlgeschlagene Anmeldung) ⇐ C#
-
- Similar Topics
- Replies
- Views
- Last post