我有我已經鍵入到我的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. 根據角色重定向
- 2. 根據角色,ASP.net MVC會員重定向
- 3. laravel 5根據用戶角色登錄後重定向用戶
- 4. asp.net登錄控制與角色重定向
- 5. 如何使用Rolify根據角色重定向根?
- 6. ASP.NET登錄角色?
- 7. Django - 根據組登錄時重定向
- 8. 根據用戶角色登錄重定向到不同的頁面後
- 9. Oracle:根據角色更改架構
- 10. asp.net登錄重定向
- 11. ASP.NET MVC - 根據角色表值顯示
- 12. PHP根據用戶的「角色」登錄
- 13. 如何重定向到ASP.NET MVC中的動態登錄URL
- 14. 更改後登錄重定向路徑
- 15. PDO:MVC如何根據用戶類型重定向用戶登錄
- 16. 根據開發或生產環境更改Facebook登錄重定向網址?
- 17. Spring MVC和登錄重定向
- 18. 如何確定登錄用戶角色
- 19. 登錄後的角JS重定向
- 20. MVC C#重定向到登錄模式
- 21. MVC 3登錄頁面重定向
- 22. MVC登錄表單不是重定向
- 23. 登錄時基於用戶角色的重定向
- 24. 重定向到不同的URL爲不同的角色登錄
- 25. 更改遠程用戶的角色而無需重新登錄
- 26. 我如何可以根據登錄用戶在mvc asp.net
- 27. 在asp.net登錄組件不重定向
- 28. asp.net重定向到登錄頁面
- 29. ASP.NET - FormsAuthentication - 登錄後無法重定向
- 30. ASP.NET登錄頁面重定向問題
像一個魅力工作!我感謝幫助! – 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