0

我正在创建一个 MVC 应用程序,其中有一个登录屏幕。当用户成功登录时,他可以看到他/她的主屏幕。此时,如果我在另一个浏览器中打开 URL,则用户已经登录。我想要的是,登录屏幕应该出现在不同浏览器中打开 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>  
4

2 回答 2

1

表单身份验证使用 cookie 来跟踪经过身份验证的用户。Cookie 在浏览器屏幕和标签之间共享。这就是所有浏览器的工作方式,这是完全预期的行为。您将在所有主要网站上观察到相同的行为。

如果您想实现这一点,您将不得不发明自己的方式来跟踪经过身份验证的用户,而不是依赖内置的表单身份验证机制。IIRC 表单身份验证还允许在 url 中发送当前经过身份验证的用户,但我不确定这是否适用于 ASP.NET MVC 路由:

<authentication mode="Forms">
  <forms loginUrl="~/Login/LogIn" timeout="2880" cookieless="UseUri" />
</authentication>
于 2013-07-22T07:30:07.337 回答
0

主屏幕应该只对登录的人可用,因此您需要删除[AllowAnonymous]主屏幕上的操作(Index?)并添加[Authorize]属性;如果用户随后尝试在未登录的情况下导航到此处,他们将通过标准表单身份验证过程被重定向到登录屏幕。

登录视图应该是应用程序的默认视图吗?如果是这样,您应该为映射到操作的空 url 添加路由LoginController LogIn

于 2013-07-22T07:30:04.687 回答