web-dev-qa-db-ja.com

FormsAuthentication.SetAuthCookieの機能

私は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である理由も知りたいです。

16
David

CreateUserWizardに_LoginCreatedUser="false"_または_DisableCreatedUser="true"_がありますか?

これにより、ユーザーがすぐにログインできなくなり、Membership.GetUser()がnullを返します。これは、ユーザーが現在ログインしていないためです。

ユーザーをすぐにログインさせたい場合は、CreateUserWizardに_LoginCreatedUser="true"_と_DisableCreatedUser="false"_のどちらも設定しないか、両方を設定します。これで、現在のコードが機能するはずです。

FormsAuthentication.SetAuthCookie()は、ユーザーのセッションを開始するためのブラウザCookieを設定します。これは、ページがサーバーに投稿されるたびにユーザーをログインさせ続けるものです。 createPersistentCookieは、ブラウザーが閉じられても期限切れにならない永続的なCookieを作成するため、ユーザーはサイトに戻って自動的にログインできます。これは、ユーザーがログインフォームの[記憶する]チェックボックスをオンにしたかどうかに基づく必要があります。デフォルトではCreateUserWizardフォームでは使用できませんが、必要に応じてテンプレートにチェックボックスを追加できます。

ユーザーを自動的にログインさせたくない場合は、コードからFormsAuthentication.SetAuthCookie()行を削除し、CreateUserWizardプロパティを適切に設定します。ログインする前にユーザーを承認する場合は、_DisableCreatedUser="true"_を設定します。 IIS Managerの.Net Usersモジュールからユーザー_IsApproved=true_を設定するか、カスタムWebページを所有してユーザーを承認するまで、ユーザーがログインできないようにします。

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

_if (!Roles.IsUserInRole(RegisterUser.UserName, "Test"))
{  
    Roles.AddUserToRole(RegisterUser.UserName, "Test");
}
_
16
nekno

ユーザーを作成したら、すぐにログインできるようにしますか?その場合は、asp.netが使用する認証Cookieを削除して、ユーザーが認証されている(承認されているのとは異なる)かどうかを判断します。 「false」は、永続的ではないことを意味します(ログオンフォームの「Remember me?」オプションと同等です。

ユーザーがNULLである理由については、GetUser呼び出しの直前にブレークポイントを配置し、ユーザーデータストアにクエリを実行して、実際にそこにあるかどうかを確認することをお勧めします。

1
Juan Ayala