2013-07-22 23 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

是的,这就是没有人推荐或使用它的原因。 –