我已經從可用的MVC4模板創建了一個Internet應用程序。此模板會生成我試圖使用的AccountController。問題是,即使WebSecurity.Login()返回true,User.Identity.IsAuthenticated仍然返回false,我不明白爲什麼。首先,我認爲這是通過AccountController初始化InitializeSimpleMembership屬性,因此,我將該部分移至Global.ascx.cs的Application_Start()例程,但它沒有任何區別。這是我正在使用的相關代碼。奇怪的MVC4身份驗證行爲 - User.Identity.IsAuthenticated在登錄後爲false
賬戶控制器
[HttpPost]
public ActionResult Login(LoginModel model, string returnUrl) {
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe)) {
//Why this should ever return false?
bool isAuthenticated = User.Identity.IsAuthenticated;
//returns false, even when I log in "Admin" role !
if (User.IsInRole("Admin")) {
return RedirectToAction("Index", "Home", new { area = "Admin" });
}
....
}
Global.ascx.cs
public class MvcApplication : System.Web.HttpApplication {
protected void Application_Start() {
AreaRegistration.RegisterAllAreas();
...
// Ensure ASP.NET Simple Membership is initialized only once per app start
LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock);
}
private class SimpleMembershipInitializer {
public SimpleMembershipInitializer() {
...
}
}
}
MSDN文檔here狀態,如果用戶登錄,則返回true。因此,在以上AccountController代碼中,User.Identity.IsAuthenticated應該始終返回True,但這不是偶然。它返回假。任何想法爲什麼?
編輯
我的首要問題是讓角色給定用戶,他已經成功地驗證後,即WebSecurity.Login()返回true後。
編輯2
Roles.IsUserInRole( 「管理」)返回false,甚至當我登錄 「管理員」 的角色
User.IsInRole( 「管理員」)在返回false即使日誌「管理員「角色。這已在原始帖子中發佈的代碼 中提及。當窗體身份驗證cookie被正確設定
我的主要問題是檢查用戶是否屬於「管理員」角色或其他角色。在WebSecurity.Login()返回true之後應該用什麼來了解角色? – Jatin
您可以使用WebSecurity.RequireRoles。請參閱http://msdn.microsoft.com/en-us/library/webmatrix.webdata.websecurity.requireroles(v=vs.111).aspx – matthijsb
我不認爲這會對我有幫助。我有2個MVC佈局頁面,一個用於普通用戶(角色=「用戶」),另一個用於管理員(角色=「管理員」)。當任何用戶登錄成功後,我必須確定用戶是屬於「admin」還是「user」角色,然後基於此,重定向到其各自的頁面。上面的WebSecurity.RequireRoles()不適合這裏,因爲它設置了我不想要的401(未授權)狀態碼。 – Jatin