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>
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
-Klasse aus der Microsoft -Identität nicht debuggen kann?
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> [code]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}"); };
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)] };
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 [/code] -Klasse aus der Microsoft -Identität nicht debuggen kann?
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...
Okay, ich bin hier ziemlich verloren und das Internet ist nicht viel Hilfe - es gibt so viele Beiträge darüber, aber jeder scheint eine eigene Version des Codes zu haben. Ich bin nur ein Hobby...
Okay, ich bin hier ziemlich verloren und das Internet ist nicht viel Hilfe - es gibt so viele Beiträge darüber, aber jeder scheint eine eigene Version des Codes zu haben. Ich bin nur ein Hobby...
Ich teste diesen Blazor-Server auf unserem vorhandenen ASP.NET Core MVC-Projekt mit der neuesten Version von .NET 8.
Beim Ausführen tritt immer dieser Fehler auf:
Die Anfrage stimmte mit mehreren...