2013-07-22 24 views
0

我正在創建一個MVC應用程序,其中我有一個登錄屏幕。當用戶成功登錄時,他能夠看到他/她的主屏幕。此時如果我在另一個瀏覽器中打開URL,用戶已經登錄。我想要的是,登錄屏幕應該在不同瀏覽器的開放網址上出現。轉到登錄屏幕瀏覽器更改

這是我的LoginController指數法:

[AllowAnonymous] 
public ActionResult Index() 
{ 
    return View(); 
} 

這是登錄功能:

[HttpPost] 
[AllowAnonymous] 
public ActionResult LogIn(string email, string password) 
{ 
} 

在web.config中,我有以下:

<authentication mode="Forms"> 
    <forms loginUrl="~/Login/LogIn" timeout="2880" /> 
</authentication> 
+0

會發生什麼事,如果你打開一個不同的瀏覽器?即如果您使用Google Chrome,請在Firefox或Internet Explorer中打開該網站。 –

+0

把它放在你的_Layout.cshtml中,看看你是否真的登錄過。「@ User.Identity.Name」。這將輸出用戶的用戶名,如果您沒有看到用戶名,那麼您沒有登錄,並且導致一些混淆的身份驗證屬性有問題。 –

回答

0

主屏幕應該只對那些已登錄的用戶可用,因此您需要刪除家庭屏幕上的[AllowAnonymous]執行操作(Index?)並添加[Authorize]屬性;如果用戶在未登錄的情況下嘗試導航到這裏,則它們將通過標準表單身份驗證過程重定向到登錄屏幕。

應該將登錄視圖作爲應用程序的默認視圖嗎?如果是這樣,您應該爲映射到LoginControllerLogIn操作的空網址添加路由。

+0

是的,我的登錄視圖是Global.ascx中路由excists的默認視圖:routes.MapRoute( 「Default」,//路由名稱 「{controller}/{action}/{id}」,// URL with參數 new {controller =「Login」,action =「Index」,id = UrlParameter.Optional} //參數默認值 ); – Nitish

+0

我必須添加一條路線嗎? – Nitish

+0

此外,如果我添加授權attribut而不是AllowAnonymous,然後在登錄後出現錯誤,找不到資源類型。 – Nitish

1

表單身份驗證使用cookie來跟蹤經過身份驗證的用戶。 Cookie在瀏覽器屏幕和選項卡之間共享。這就是所有瀏覽器的工作方式,都是完全預期的行爲。您將觀察所有主要網站的相同行爲。

如果你想達到這個目標,你將不得不發明自己的方式來跟蹤經過驗證的用戶,而不是依賴內置的表單身份驗證機制。 IIRC窗體身份驗證還允許在URL發送當前驗證的用戶,但我不知道這工作得很好ASP.NET MVC路由:

<authentication mode="Forms"> 
    <forms loginUrl="~/Login/LogIn" timeout="2880" cookieless="UseUri" /> 
</authentication> 
+0

它也有產生不適合與其他用戶共享的怪誕網址的副作用。 –

+0

是的,這就是沒有人推薦或使用它的原因。 –