我正在使用一个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()设置浏览器cookie以启动用户的会话。这是使页面每次发布到服务器时都使用户保持登录状态的原因。 createPersistentCookie创建一个持久性cookie,该持久性cookie在关闭浏览器时不会过期,因此用户可以返回该站点并自动登录。它应基于用户是否选中了“登录”表单上的“记住我”复选框。默认情况下,它在CreateUserWizard窗体上不可用,但是您可以根据需要在模板中添加一个复选框。

如果您不希望用户自动登录,请从代码中删除FormsAuthentication.SetAuthCookie()行,并适当设置CreateUserWizard属性。如果要在用户登录之前批准用户,请设置DisableCreatedUser="true"。这将阻止他们登录,直到您从IIS管理器中的.Net用户模块设置用户IsApproved=true,或者您拥有自定义网页来批准用户。

您仍然可以在创建用户时设置将用户添加到适当的角色,而无需登录:

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

09-12 11:36