При попытке добавить роль пользователю я столкнулся со следующей ошибкой:
Store не реализует IUserRoleStore.
Как устранить эту ошибку?
Я использую .NET 7.
public static async Task SeedUsersAsync(UserManager userManager)
{
if (!userManager.Users.Any())
{
var user = new ApplicationUser
{
DisplayName = "Bob",
Email = "bob@test.com",
UserName = "bob@test.com",
Address = new Address
{
FirstName = "Bob",
LastName = "Bobbity",
Street = "10 The street",
City = "New York",
State = "NY",
ZipCode = "90210"
},
EmailConfirmed = true,
};
await userManager.CreateAsync(user, "Pa$$w0rd");
await userManager.AddToRoleAsync(user, Roles.Standard.ToString("f")); // Error happend here!
}
}
Расширения IdentityService:
public static class IdentityServiceExtensions
{
public static IServiceCollection AddIdentityServices(this IServiceCollection services, IConfiguration config)
{
var builder = services.AddIdentityCore();
builder = new IdentityBuilder(builder.UserType, builder.Services);
builder.AddEntityFrameworkStores();
builder.AddSignInManager();
builder.Services.AddIdentity()
.AddEntityFrameworkStores();
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(config["Token:Key"])),
ValidIssuer = config["Token:Issuer"],
ValidateIssuer = true,
ValidateAudience = false
};
});
services.AddAuthorization(opts =>
{
opts.AddPolicy(PolicyType.RequireSuperAdminRole.ToString("f"), policy => policy.RequireRole("SuperAdmin"));
opts.AddPolicy(PolicyType.RequireAdministratorRole.ToString("f"), policy => policy.RequireRole("Admin", "SuperAdmin"));
opts.AddPolicy(PolicyType.RequireStandardRole.ToString("f"), policy => policy.RequireRole("Basic", "Admin", "SuperAdmin"));
});
return services;
}
}
Program.cs:
using var scope = app.Services.CreateScope();
var services = scope.ServiceProvider;
var loggerFactory = services.GetRequiredService();
try
{
var context = services.GetRequiredService();
var userManager = services.GetRequiredService();
var roleManager = services.GetRequiredService();
await context.Database.MigrateAsync();
await ShopContextSeed.SeedAsync(context, loggerFactory);
await IdentityContextSeed.SeedRolesAsync(roleManager);
await IdentityContextSeed.SeedUsersAsync(userManager);
}
catch (Exception ex)
{
var logger = loggerFactory.CreateLogger();
logger.LogError(ex, "An error occurred during migration");
}
Подробнее здесь: https://stackoverflow.com/questions/744 ... storetuser