SimpleMembership向已认证的用户展示登录表单

4
使用SimpleMembership开发ASP.Net MVC 4网站时,即使用户已登录,有时仍然会调用Login GET控制器。到目前为止,这种情况只在开发过程中发生(我们还没有进行QA测试),并且只会在修改.cshtml页面后偶尔发生,而不是一贯如此。
我已经向模板提供的Login()方法添加了日志记录,并查看用户确实已通过身份验证,并具有登录用户应具有的所有角色。请注意,保留HTML标记,但不要添加任何解释。
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
    if (User.Identity.IsAuthenticated)
    {
        logger.Error("User " + User.Identity.Name + " is authenticated shown login form.  Roles: " + string.Join(", ", Roles.GetRolesForUser(User.Identity.Name)));
        // Temporary work-around: WebSecurity.Logout();
    }

    ViewBag.ReturnUrl = returnUrl;
    return View();
}

问题

  • 是什么导致了这种行为?
  • 在生产系统中是否可能出现这种情况,例如应用程序域被回收时?
  • 从安全角度来看,在返回登录视图之前调用WebSecurity.Logout()的解决方法是否可靠?

我从未见过ASP.NET运行时会重定向,如果User.Identity.IsAuthenticated为真。你有检查过浏览器的网络请求吗?也就是说,这绝对是保护资源的重定向吗? - Matt Randle
我没有直接在网络请求中观察到它(它是零星发生的),但每当我对视图进行微小编辑(编辑.cshtml)并刷新视图时,它总是发生。因此,它始终由需要身份验证和特定角色的控制器的刷新触发。 - Eric J.
1个回答

2

如果您想检查用户是否已登录,则可以尝试以下方法,而不是使用User.Identity:

if(Request.IsAuthenticated) {...}

如果此时有任何用户登录,则这是真实的。希望这就是你要找的答案!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接