我正在将ASP.NET Core 2.1与来自.NET的新Identity框架一起使用。常规(
echo "EMAIL"
echo "PASSWORD"
) | heroku login
属性只要不要求特定角色就可以使用。
我需要一些扩展/自定义策略来使用角色吗?以下是我的代码的最小化示例:
Startup.cs
Authorization
HomeController.cs
public void ConfigureServices(IServiceCollection services)
{
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<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>()
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
// Does not change anything
// services.AddAuthorization();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
答案 0 :(得分:14)
这是2.1
版本中的一个已知问题,已在2.2 preview-1
中修复。
原因是ASP.NET Core 2.1
中引入的AddDefaultIdentity<TUser>()
新方法默认不会启用Roles
。
要绕过它,而不是使用新的AddDefaultIdentity<TUser>()
来配置Identity,只需使用旧式api即可:
services.AddIdentity<AppUser, IdentityRole>()
.AddRoleManager<RoleManager<IdentityRole>>()
.AddDefaultUI()
.AddDefaultTokenProviders()
.AddEntityFrameworkStores<ApplicationDbContext>();
此外,如果您之前已经登录过某人,请先注销并再次登录,它现在将按预期工作。
答案 1 :(得分:0)
嗯。我在正在运行的Asp.Net 2.1项目中具有以下代码:
services.AddDefaultIdentity<IdentityUser>()
.AddRoles<IdentityRole>()
//.AddDefaultUI(UIFramework.Bootstrap4)
.AddDefaultTokenProviders()
.AddEntityFrameworkStores<ApplicationDbContext>();