AddEntityFrameworkStores只能与从IdentityUser 派生的用户一起调用

问题描述 投票:0回答:1
我正在尝试为我的Web应用程序创建一些角色,但是由于Tkey exception,它实际上无法正常工作。

我不知道该如何解决。我认为我的Startup.cs有问题。

无论我尝试添加DefaultIdentity还是添加角色。

Startup.cs-在此行上出现错误:

services.AddDefaultIdentity<IdentityRole>().AddRoles<IdentityRole>().AddDefaultUI().AddEntityFrameworkStores<VerwaltungsprogrammContext>();

这是错误消息:

只能使用从IdentityUser派生的用户来调用AddEntityFrameworkStores

namespace Verwaltungsprogramm { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddSession(); services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddDbContext<VerwaltungsprogrammContext>(options => options.UseSqlServer( Configuration.GetConnectionString("VerwaltungsprogrammContext"))); //services.AddDefaultIdentity<IdentityUser>(); --------------> services.AddDefaultIdentity<IdentityRole>().AddRoles<IdentityRole>().AddDefaultUI().AddEntityFrameworkStores<VerwaltungsprogrammContext>(); <-------------- services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2) .AddRazorPagesOptions(options => { options.AllowAreas = true; options.Conventions.AuthorizeAreaFolder("Logins", "/Create"); options.Conventions.AuthorizeAreaPage("Logins", "/Logout"); }); services.ConfigureApplicationCookie(options => { options.LoginPath = $"/Logins/Index"; options.LogoutPath = $"/Logins/Logout"; options.AccessDeniedPath = $"/Cars/Index"; }); //Password Strength Setting services.Configure<IdentityOptions>(options => { // Password settings options.Password.RequireDigit = true; options.Password.RequiredLength = 8; options.Password.RequireNonAlphanumeric = false; options.Password.RequireUppercase = true; options.Password.RequireLowercase = false; options.Password.RequiredUniqueChars = 6; // Lockout settings options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(30); options.Lockout.MaxFailedAccessAttempts = 10; options.Lockout.AllowedForNewUsers = true; // User settings options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+"; options.User.RequireUniqueEmail = false; }); //Seting the Account Login page services.ConfigureApplicationCookie(options => { // Cookie settings options.Cookie.HttpOnly = true; options.ExpireTimeSpan = TimeSpan.FromMinutes(5); options.LoginPath = "/Logins/Create"; // If the LoginPath is not set here, ASP.NET Core will default to /Account/Login options.AccessDeniedPath = "/Cars/Index"; // If the AccessDeniedPath is not set here, ASP.NET Core will default to /Account/AccessDenied options.SlidingExpiration = true; }); services.AddSingleton<IEmailSender, EmailSender>(); } public class EmailSender : IEmailSender { public Task SendEmailAsync(string email, string subject, string message) { return Task.CompletedTask; } } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseSession(); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); app.UseAuthentication(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); Seed.CreateRoles(serviceProvider, Configuration).Wait(); } }

}

错误:

AddEntityFrameworkstores只能与从IdentityUser派生的用户一起调用

Seed.cs文件将创建一些角色

这是我的Seed.cs

namespace Verwaltungsprogramm { public static class Seed { public static async Task CreateRoles(IServiceProvider serviceProvider, IConfiguration Configuration) { //adding customs roles var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>(); var UserManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>(); string[] roleNames = { "Admin", "Manager", "Member" }; IdentityResult roleResult; foreach (var roleName in roleNames) { // creating the roles and seeding them to the database var roleExist = await RoleManager.RoleExistsAsync(roleName); if (!roleExist) { roleResult = await RoleManager.CreateAsync(new IdentityRole(roleName)); } } // creating a super user who could maintain the web app var poweruser = new ApplicationUser { UserName = Configuration.GetSection("AppSettings")["UserEmail"], Email = Configuration.GetSection("AppSettings")["UserEmail"] }; string userPassword = Configuration.GetSection("AppSettings")["UserPassword"]; var user = await UserManager.FindByEmailAsync(Configuration.GetSection("AppSettings")["UserEmail"]); if (user == null) { var createPowerUser = await UserManager.CreateAsync(poweruser, userPassword); if (createPowerUser.Succeeded) { // here we assign the new user the "Admin" role await UserManager.AddToRoleAsync(poweruser, "Admin"); } } } } }

我正在尝试为我的Web应用程序创建一些角色,但是由于Tkey异常,它实际上无法正常工作。我不知道该如何解决。我认为我的Startup.cs有问题。 ...
c# asp.net asp.net-2.0
1个回答
0
投票
如果这样在Startup.cs中编写该行,是否还会发生错误?
© www.soinside.com 2019 - 2024. All rights reserved.