我有我已经键入到我的MVC项目帐户控制器中的以下代码,我在管理员和经理角色。当我登录时,我被重定向回我的家庭索引,而不是被重定向到我的AdminApp索引。任何想法,我在我的代码错了?如何根据角色更改ASP.Net MVC登录重定向?
回答
您的代码没有按预期工作的原因是因为User
在技术上已经而不是已登录并进行身份验证。说什么?但你确实打过SignIn!
FormsAuth.SignIn(userName, rememberMe);
- 在这种情况下只是FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
的包装 - 仅在用户浏览器上设置asp.net授权cookie作为响应的一部分。只有在之后请求这一点,用户的浏览器才会有cookie,导致asp.net成员资格正确设置'用户'对象。 LogOn方法中的所有代码仍然假设匿名用户,因此您的IsInRole检查失败,并将您重定向到主页。将你的if语句放在另一个页面上,登录后,你会看到现在User.IsInRole
按预期工作。 (事实上,这是你在登录过程中使用什么User.IsInRole的,只是没有)
因此,如何在实际的登录过程检查? Roles.IsUserInRole
或Roles.GetRolesForUser
是一对情侣的方式,例如:
if (Roles.IsUserInRole(userName, "Administrator") || Roles.IsUserInRole(userName, "Administrator"))
{
return RedirectToAction("Index", "AdminApp");
}
您必须明确指定用户身份登录,将实际执行对会员数据存储查询的用户名。在那个笔记上,我相信上面的代码会导致两个查询被执行,你可能会发现不太理想。这是Roles.GetRolesForUser可能是更好的选择:
string[] roles = Roles.GetRolesForUser(userName);
if (roles.Contains("Administrator") || roles.Contains("Manager"))
{
return RedirectToAction("Index", "AdminApp");
}
希望帮助!
您需要取消嵌套if语句。修改如下:
更改此:
FormsAuth.SignIn(userName, rememberMe);
if (!String.IsNullOrEmpty(returnUrl))
{
return Redirect(returnUrl);
}
else
{
if (User.IsInRole("Administrator") || (User.IsInRole("Manager")))
{
return RedirectToAction("Index", "AdminApp");
}
else
{
return RedirectToAction("Index", "Home");
}
}
这样:
if (User.IsInRole("Administrator") || (User.IsInRole("Manager")))
{
return RedirectToAction("Index", "AdminApp");
}
else
{
return RedirectToAction("Index", "Home");
}
问题是行if(!String.IsNullOrEmpty(returnUrl)))
被评估为真,因为RETURNURL参数有你的网页的网址来自默认。
哼。我尝试过,并没有为我工作。我可以在一个aspx页面上成功地使用User.InInRole来显示/隐藏链接,但是当我把它放在一个控制器中时它不起作用。在控制器中是否有另外一种方法来执行此操作? – Ben 2009-12-08 17:54:31
不应该有太大的区别,但是您可以尝试使用Roles.IsUserInRole()。但是,我认为这是最终被User.IsInRole()方法调用的方法。 – 2009-12-08 19:12:58
我使用VS 2013和它的新身份模型,我结束了这是怎么回事:
foreach (IdentityUserRole identityUserRole in user.Roles)
{
if (identityUserRole.RoleId == "AdminRoleId")
{
return RedirectToAction("Index", "Admin");
}
else if (identityUserRole.RoleId == "MemberRoleId")
{
return RedirectToAction("Index", "Members");
}
}
- 1. ASP.NET根据角色重定向用户
- 2. 基于角色的ASP.NET MVC登录和重定向
- 3. 根据角色重定向
- 4. 根据角色,ASP.net MVC会员重定向
- 5. laravel 5根据用户角色登录后重定向用户
- 6. 根据用户的角色重定向
- 7. asp.net登录控制与角色重定向
- 8. FosUserBundle登录后重定向
- 9. ASP.NET登录角色?
- 10. 如何使用Rolify根据角色重定向根?
- 11. 如何根据角色在登录方法上重定向asp.net成员身份用户
- 12. Django - 根据组登录时重定向
- 13. 根据用户角色登录重定向到不同的页面后
- 14. 如何在asp.net中使用角色管理登录后重定向用户?
- 15. Oracle:根据角色更改架构
- 16. asp.net登录重定向
- 17. ASP.NET MVC - 根据角色表值显示
- 18. 如何重定向到ASP.NET MVC中的动态登录URL
- 19. PHP根据用户的“角色”登录
- 20. 根据角色winforms登录验证
- 21. 更改后登录重定向路径
- 22. 登录Web角色MVC
- 23. 登录重定向问题
- 24. MVC自定义角色提供者重定向到登录页面
- 25. 更改登录和注销的重定向asp.net
- 26. 如何根据ASP.NET MVC中的日期重定向网站?
- 27. Asp.net Identity 2.0 - 在登录时根据角色重定向外部认证的用户
- 28. PDO:MVC如何根据用户类型重定向用户登录
- 29. ASP.NET MVC 4如何根据角色提供不同的HTML?
- 30. 根据开发或生产环境更改Facebook登录重定向网址?
像一个魅力工作!我感谢帮助! – Ben 2009-12-19 00:06:12
现在是3年半以后,但是..谢谢! – peter 2013-05-24 00:16:42
哇!它仍然适用于** Asp.Net Core **。 – vivek 2017-10-16 10:23:35