19

MVC4ユーザー認証に問題があります。

System.Web.Security.Membership.ValidateUserを返しますtrue
次にFormsAuthentication.SetAuthCookie、に到達し、ブラウザにCookieが表示されます。
その後、User.Identity.IsAuthenticatedまだfalse何らかの理由で評価します。
User.Identity.IsAuthenticatedリダイレクト後もfalseであり、そのままfalseです。

[AllowAnonymous]
[HttpPost]
public ActionResult Login(LoginModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        if (System.Web.Security.Membership.ValidateUser(model.UserName, model.Password))
        {
            FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
            if (Url.IsLocalUrl(returnUrl))
            {
                return Redirect(returnUrl);
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }
        else
        {
            ModelState.AddModelError("", "The user name or password provided is incorrect.");
        }
    }

    // If we got this far, something failed, redisplay form
    return View(model);
}
4

3 に答える 3

21

webconfigを確認してください。フォーム認証を有効にする必要があります。

次のスニペットを中に追加します

   <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="3600" />
    </authentication>

それがあなたのwebconfigにあるかどうかコメントアウトしてください:

<!--<modules>
      <remove name="FormsAuthentication" />
</modules>-->

今、あなたはチェックすることができます

WebSecurity.CurrentUserName、WebSecurity.CurrentUserIdおよび、WebSecurity.IsAuthenticatedフラグ。

于 2015-05-02T02:34:27.870 に答える
20

User.Identity.IsAuthenticatedを呼び出した後の次のリクエストまでtrueに設定されませんFormsAuthentication.SetAuthCookie()

http://msdn.microsoft.com/en-us/library/twk5762b.aspxを参照してください

SetAuthCookieメソッドは、フォーム認証チケットをCookieコレクションに追加するか、CookiesSupportedがfalseの場合はURLに追加します。フォーム認証チケットは、ブラウザによって行われた次のリクエストにフォーム認証情報を提供します。

于 2013-01-24T18:49:11.463 に答える
1

追加のラウンドトリップ(RedirectToAction)が必要ですが、これで私が望んでいたことが達成されました。また、このサンプルでは強く型付けされたモデルを使用していませんが、それはアイデアを示しています。このコードは、ユーザーが認証されているかどうかを確認し、認証されていない場合はCookieを設定してから自分自身にリダイレクトします。2回目にIsAuthenticatedが呼び出された場合はtrueであり、ビューが返されます。フォーム入力の名前がuserNameとpasswordであることを確認してください。

[AllowAnonymous]
[HttpPost]
public ActionResult Login(string userName, string password, string returnUrl)
{
if (ModelState.IsValid)
{
    if (HttpContext.User.Identity.IsAuthenticated)
    {
        return View(returnUrl);
    }
    else
    {
        if (System.Web.Security.Membership.ValidateUser(userName, password))
        {
            FormsAuthentication.SetAuthCookie(userName, false);
            if (Url.IsLocalUrl(returnUrl))
            {
                return RedirectToAction("Login", new { userName = userName, password = password, returnUrl = returnUrl });
                //return Redirect(returnUrl);
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }
    }
    else
    {
        ModelState.AddModelError("", "The user name or password provided is incorrect.");
    }
}

// If we got this far, something failed, redisplay form
return View(model);
}
于 2013-08-27T15:39:54.147 に答える