asp.netのメンバーシップIsApprovedはfalseですが、ログインは許可されています

StackOverflow https://stackoverflow.com/questions/1212503

  •  06-07-2019
  •  | 
  •  

質問

iはデフォルトのアカウントメンバーシッププロバイダーを変更して、IsApprovedをfalseに設定しました。

    public MembershipCreateStatus CreateUser(string userName, string password, string email)
    {
        MembershipCreateStatus status;
        _provider.CreateUser(userName, password, email, null, null, false, null, out status);
        return status;
    }

しかし、ログインページに戻ると、ログインできます。ログインに失敗し、承認されなかったと言ってはいけませんか?

編集:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Register(string userName, string email, string password, string confirmPassword, string address, string address2, string city, string state, string homePhone, string cellPhone, string company)
    {

        ViewData["PasswordLength"] = MembershipService.MinPasswordLength;

        if (ValidateRegistration(userName, email, password, confirmPassword))
        {

            // Attempt to register the user
            MembershipCreateStatus createStatus = MembershipService.CreateUser(userName, password, email);

            if (createStatus == MembershipCreateStatus.Success)
            {
                FormsAuth.SignIn(userName, false /* createPersistentCookie */);

                TempData["form"] = Request.Form;
                TempData["isActive"] = false;
                return RedirectToAction("Create", "Users");
            }
            else
            {
                ModelState.AddModelError("_FORM", ErrorCodeToString(createStatus));
            }
        }

        // If we got this far, something failed, redisplay form
        return View();
    }
役に立ちましたか?

解決

(この質問の他のコピーは閉じられそうなので、ここに答えをコピーしました)

HttpRequest.IsAuthenticated HttpContext.User.Identityがnullではなく、IsAuthenticatedプロパティがtrueを返す場合、trueを返します。

現在のIDはで設定されますFormsAuthenticationModule ですが、MembershipProviderとは関係ありません。実際、それも参照していません。認証Cookieがまだ設定され、有効である(つまり、期限が切れていない)かどうかを確認するだけです。

問題は、 FormsAuthentication メソッド( RedirectFromLoginPage 、認証Cookieの設定です。ユーザーが承認されるまで待つ必要がある場合は、Cookieを設定していないことを確認する必要があります。

更新

MembershipCreateStatus の値はありませんユーザーが作成されたが承認されていないことを指定するため、コードはユーザーが承認されたかどうかを実際に確認せずに FormsAuth.SignIn を呼び出しています。

FormsAuth.SignIn は、Cookieを設定するだけです。ユーザーを検証することもなければ、MembershipProviderと関係を持ちません。承認が非同期(つまり、人間を待っている)の場合、FormsAuth.SignInを呼び出してユーザーを自動的にログインしないでください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top