Bar*_*osz 22 asp.net-mvc forms-authentication .aspxauth simplemembership
我有ASP.NET MVC 4应用程序.我使用Simple Membership Provider允许在登录表单下勾选记住我的复选框.如果勾选,则创建persitent cookie .ASPXAUTH,从登录日期起100天后到期.一切正常,除了应用程序的主菜单.
菜单的某些部分仅供管理员用户使用.我用:
@if (User.IsInRole("Administrator")) { @Html.Partial("_MainMenuPartial") }
Run Code Online (Sandbox Code Playgroud)
锁定它们不被普通用户渲染.登录系统后,此方法可以正常工作.当我在一段时间后返回并使用持久性cookie来验证我时,我确实登录了,但是
@User.IsInRole("Administrator")
Run Code Online (Sandbox Code Playgroud)
返回"False",因此我看不到管理员菜单项.同时
@User.Identity.Name
Run Code Online (Sandbox Code Playgroud)
返回正确的登录名和
@User.Identity.IsAuthenticated
Run Code Online (Sandbox Code Playgroud)
返回"True",证明持久性cookie工作正常.为什么我不能访问用户角色,即使用户通过系统进行身份验证呢?
小智 19
使用MVC5角色的问题
我找到了解决方案.在我的web.config中:
<modules>
<remove name="FormsAuthenticationModule" />
<remove name="RoleManager" />
</modules>
Run Code Online (Sandbox Code Playgroud)
我添加了删除name ="RoleManager"行,并且新的AspNet.Identity代码接管后允许我使用User.IsInRole(..)
http://forums.asp.net/t/1952572.aspx?Problem+using+roles+with+MVC5
我也有类似的问题,IsUserInRole
返回假。通过将手表放在上面,我可以通过使用下面所述的过载来克服此问题。尝试一下,在出现错误的地方放置一个断点,然后看看会发生什么。
@if (Roles.IsUserInRole(Model.UserName, "Administrator"))
Run Code Online (Sandbox Code Playgroud)
我很确定您也可以将其User.Identity.Name
用作第一个参数。
旧问题,但是这里缺少一些信息。我遇到了同样的问题,需要牢记一件事。如果您在身份验证后测试用户身份(例如User.IsInRole(“ admin”))(而未将响应发送到客户端),则Identity框架尚未填充此会话信息(或者,至少我找不到方法)去做)。您要求的此信息会在控制器返回后的某个时候填充。如果要(IE)登录后重定向到不同的视图,取决于用户角色,则必须使用自定义授权过滤器。
小智 5
如果您使用最新的身份框架,请查看您是否使用以下
services.AddIdentity<IdentityUser,IdentityRole>()
.AddEntityFrameworkStores<WebUserContext>()
.AddDefaultTokenProviders();
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 AddDefaultIdentity Roles,则不会填充。
services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<WebUserContext>()
.AddDefaultTokenProviders();
Run Code Online (Sandbox Code Playgroud)
我遇到了类似的问题,似乎身份验证模块未与 SimpleMembershipProvider 完全连接。为了解决这个问题,您可以使用 Role 类来访问所需的信息。例如,要检查是否在角色中使用,您可以使用以下命令:
Roles.GetRolesForUser("sergey").Contains("Developer")
Run Code Online (Sandbox Code Playgroud)
因此,在使用 SimpleMembershipProvider 角色时还有其他有用的方法:
Roles.RoleExists("Developer")
Roles.CreateRole("Developer");
Roles.AddUserToRole("sergey", "Developer");
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
31055 次 |
最近记录: |