4

SimpleMembership を使用して ASP.Net MVC 4 Web サイトを開発すると、ユーザーがログインしていても Login GET コントローラーが呼び出されることがあります。 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) {...}

これは、現在ログインしているユーザーがいる場合に当てはまります。これがあなたが探していた答えであることを願っています!

于 2013-02-20T21:56:27.563 に答える