gpt4 book ai didi

asp.net-identity - Identity 2.0 自定义 UserManager/RoleManager 与调用 User.IsInRole ("RoleName"的 Razor )

转载 作者:行者123 更新时间:2023-12-01 16:03:49 27 4
gpt4 key购买 nike

问题如下:通读以了解您需要帮助回答什么...

我有

  • 对比 2013
  • 带有 Razor View 的 MVC 5
  • Dapper DAL 自定义 UserManager 和 UserStore/User : IUser< int >

我构建了自己的 UserManager、RoleManager、UserStore、RoleStore 以及所有基于 CustomUser : IUser< int > 和 CustomRole : IRole< int >

我可以更改密码、恢复忘记的密码、登录、注销……一切正常。

但是,在 Razor View 中,当我尝试使用时:

User.IsInRole("Administrators");

我从其他模块得到一个 SQL 异常(这可能发生在 iPrincipal Identity 类中???):

System.Data.SqlClient.SqlException occurred
_HResult=-2146232060
_message=A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)
Source=.Net SqlClient Data Provider
ErrorCode=-2146232060
_doNotReconnect=false
Class=20
LineNumber=0
Number=-1
Server=""
State=0
StackTrace:
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
InnerException: <null>

但是我可以打电话

var user = AsyncHelpers.RunSync<CloudUser>(() => UserManager.FindByNameAsync(User.Identity.Name));
ViewBag.IsInAdminRole = AsyncHelpers.RunSync<bool>(() => UserManager.IsInRoleAsync(user.Id, "Administrators"));

在我的 Controller 服务器代码中....

问题:

  1. User.IsInRole 与 UserManager/UserStore 和/或 RoleManager 之间的关系是什么

  2. 如何让 Razor View 中的 User.IsInRole("Administrators") ‘理解’它需要使用我的自定义身份验证实现?

最佳答案

我怀疑您的实现在用户登录时未提供 ClaimsPrincipal

@User 应该是 ClaimsPrincipal 并且 IsInRole ( see source ) 不会进入数据库,而是检查类型声明“角色”设置在委托(delegate)人的身份上。如果您看到此异常,则您的 IPrincipal 与“ClaimsPrincipal”不同。

我已经通读了您链接的答案,但我认为这不是与身份框架一起使用的最佳解决方案。 The answer是pre-Identity,讲的是MembershipProvider。当您与 MembershipProvider 打交道时,您必须做这些事情。现在,Identity 为您提供了更好、更简洁的方式来执行自定义功能。

我建议不要实现 CustomPrincipal 并使用 .Net 框架提供的 ClaimsPrincipal。当您从 UserManager.CreateIdentityAsync 返回 IPrincipal 时,只需在主体上添加类型为 ClaimTypes.Role 的声明和角色名称。

关于asp.net-identity - Identity 2.0 自定义 UserManager/RoleManager 与调用 User.IsInRole ("RoleName"的 Razor ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26066442/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com