【问题标题】:How to use roles in .NET MVC Core如何在 .NET MVC Core 中使用角色
【发布时间】:2019-08-05 18:34:52
【问题描述】:

我已经尝试了几天在 MVC 项目中实现角色。我已经开始了一个新项目并选择了“个人用户帐户”的身份验证。我将 [Authorize] 添加到 HomeControllers Indexpage 并且一切正常。添加我包括的角色:

services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>();

到 startup.cs ->ConfigureServices 然后从startup->Configure添加对以下函数的调用

private async Task CreateRole(IServiceProvider serviceProvider)
{
    var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
    IdentityResult roleResult;
    roleResult = await RoleManager.CreateAsync(new IdentityRole("Admin"));
}

private async Task SetUserAdmin(string username, IServiceProvider serviceProvider)
{
    var UserManager = serviceProvider.GetRequiredService<UserManager<IdentityUser>>();
    IdentityUser user = await UserManager.FindByEmailAsync(username);
    await UserManager.AddToRoleAsync(user, "Admin");
}

这将创建角色“管理员”并将其绑定到特定用户。 当我通过以下方式查看数据库中的表时:

select * from AspNetRoles
select * from AspNetUsers
select * from AspNetUserRoles

表格已填充并相互链接,但是当我使用 [Authorize(Roles="Admin")] 时会出现错误页面 401,但是当我通过以下方式读出用户的角色时:

var roles = await UserManager.GetRolesAsync(await UserManager.FindByEmailAsync(username));

它将返回值“Admin”。

可能是什么问题? 非常感谢您的任何建议!

【问题讨论】:

    标签: .net identity roles


    【解决方案1】:

    您是如何在启动文件中添加身份的? 我认为services.AddIdentity 有问题。

    我用:

    services.AddIdentity<IndentityUser, IdentityRole>(options => options.Stores.MaxLengthForKeys = 128)
                    .AddEntityFrameworkStores<ApplicationDbContext>()
                    .AddDefaultTokenProviders();
    

    这是 .Net Core 2.1 .net core identity 2.1 role authorize not working 的一个已知错误

    应该在2.2解决

    【讨论】:

    • 感谢您的回复,我基本上已经在身份和服务中搭建了脚手架。AddDefaultIdentity 添加了 .AddRoles()。数据库似乎是正确的,但 [Authorize(Roles="Admin")] 将我带到 401 页面,而 [Authorize] 工作正常。
    • 您使用的是哪个版本的 .Net Core?仅用于故障排除尝试使用 services.AddIdentity() 而不是 services.AddDefaultIdentity().AddRoles()。您是否指定了 AddEntityFrameworkStores?
    • 我使用的是 .Net Core 2.1。从 AddDefaultIdentity 到 AddIdentity 的更改解决了对 [Authorize(roles="Admin")] 做出反应的问题,但现在程序尝试在 Account/Login 而不是 Identity/Account/Login 处查找登录页面。再加上由于 IEmailSender 导致注册不起作用...我似乎无法在网上找到解决此问题的演练,即使它肯定是一个常见的实现方式?你知道在哪里可以找到它,这样我就可以了解发生了什么?
    • 这么想,这是一个已知的错误:stackoverflow.com/questions/52526186/… 如果可能的话,我建议更新到 .Net Core 2.2
    • 终于成功了!您的链接和 C-Berber:s 帖子解决了这个问题。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多