Microsoft Identity Blazor .NET 8 Server (fehlgeschlagene Anmeldung)C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Microsoft Identity Blazor .NET 8 Server (fehlgeschlagene Anmeldung)

Post by Anonymous »

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: 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 
-Klasse aus der Microsoft -Identität nicht debuggen kann?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post