4

使用 SimpleMembership 开发一个 ASP.Net MVC 4 网站,即使用户已登录,有时也会调用 Login GET 控制器。到目前为止,这仅发生在开发期间(我们还没有进行 QA),并且仅在修改 . cshtml 页面。在修改 .cshtml 页面后偶尔会发生这种情况,但并非始终如一。

我已将日志记录添加到Login()模板提供的方法中,并看到用户确实经过身份验证,并且具有登录用户应具有的所有角色。

[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()合理?
4

1 回答 1

2

如果要检查用户是否登录,而不是 User.Identity 试试这个:

if(Request.IsAuthenticated) {...}

如果此时有任何用户登录,则为 true。希望这是您正在寻找的答案!

于 2013-02-20T21:56:27.563 回答