私は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である理由も知りたいです。
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");
}
_
ユーザーを作成したら、すぐにログインできるようにしますか?その場合は、asp.netが使用する認証Cookieを削除して、ユーザーが認証されている(承認されているのとは異なる)かどうかを判断します。 「false」は、永続的ではないことを意味します(ログオンフォームの「Remember me?」オプションと同等です。
ユーザーがNULLである理由については、GetUser呼び出しの直前にブレークポイントを配置し、ユーザーデータストアにクエリを実行して、実際にそこにあるかどうかを確認することをお勧めします。