1. ホーム
  2. asp.net

[解決済み] FormsAuthentication.SetAuthCookieは何をするのですか?

2022-03-04 17:26:09

質問

createuserwizard コントロールを使用しています。CreatedUserイベントで、ユーザーをロールに追加するために、次のコードを配置しました。

    protected void RegisterUser_CreatedUser(object sender, EventArgs e)
    {
        FormsAuthentication.SetAuthCookie(RegisterUser.UserName, false /* createPersistentCookie */);


        if (!Roles.IsUserInRole("Test"))
        {
            var User= Membership.GetUser();
            Roles.AddUserToRole(User.UserName, "Test");
        }

        string continueUrl = RegisterUser.ContinueDestinationPageUrl;

        if (String.IsNullOrEmpty(continueUrl))
        {
            continueUrl = "~/";
        }
        Response.Redirect(continueUrl);
    }

も知りたいところです。 FormsAuthentication.SetAuthCookie(RegisterUser.UserName, false /* createPersistentCookie */); の意味と用途、そしてなぜ Membership.GetUser() は null です。

解決方法は?

をお持ちですか? LoginCreatedUser="false" または DisableCreatedUser="true" を追加しました。 CreateUserWizard ?

これらは、ユーザーがすぐにログインできないようにするもので、その結果 Membership.GetUser() は、現在ログインしていないため、null を返します。

すぐにでもログインさせたい場合は、どちらか一方または両方の LoginCreatedUser="true"DisableCreatedUser="false" を使用します。 CreateUserWizard . これで、現在のコードが動作するようになります。

FormsAuthentication.SetAuthCookie() は、ユーザーのセッションを開始するために、ブラウザのクッキーを設定します。これは、ページがサーバーに投稿されるたびに、ユーザーのログインを維持するものです。 createPersistentCookie は、ブラウザを閉じても失効しない永続的なクッキーを作成し、ユーザーがサイトに戻ると自動的にログインできるようにします。これは、ユーザーがログイン・フォームの "Remember me" チェックボックスをチェックしたかどうかに基づいているはずです。これは CreateUserWizard フォームにチェックボックスを追加することができます。

自動でログインさせたくない場合は FormsAuthentication.SetAuthCookie() の行を追加し CreateUserWizard プロパティを適切に設定します。ユーザがログインする前に承認したい場合は DisableCreatedUser="true" . を設定するまで、ログインできないようにします。 IsApproved=true を、IIS マネージャーの .Net Users モジュール、または独自のカスタム Web ページで使用して、ユーザーを承認することができます。

ユーザーをログインさせることなく、ユーザー作成時に適切なロールに追加するように設定することができます。

if (!Roles.IsUserInRole(RegisterUser.UserName, "Test"))
{  
    Roles.AddUserToRole(RegisterUser.UserName, "Test");
}