FormsAuthentication.SetAuthCookie做了什么

时间:2011-08-20 20:58:14

标签: asp.net security asp.net-membership

我正在使用一个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()为空的原因。

2 个答案:

答案 0 :(得分:16)

您的LoginCreatedUser="false"上有DisableCreatedUser="true"CreateUserWizard吗?

这些将阻止用户立即登录,并导致Membership.GetUser()返回null,因为用户当前未登录。

如果您希望用户立即登录,请在LoginCreatedUser="true"上同时设置DisableCreatedUser="false"CreateUserWizard。这应该让你当前的代码工作。

FormsAuthentication.SetAuthCookie()设置浏览器Cookie以启动用户的会话。这是每次将页面发布到服务器时保持用户登录的原因。 createPersistentCookie创建一个持久性cookie,在浏览器关闭时不会过期,因此用户可以返回该站点并自动登录。它应该基于用户是否选中了“登录”表单上的“记住我”复选框。默认情况下,它不会在CreateUserWizard表单中提供,但如果您愿意,可以在模板中为其添加一个复选框。

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

您仍然可以在创建用户时将用户添加到相应的角色,而无需将其登录:

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

答案 1 :(得分:1)

创建用户后,您希望他们立即登录,对吗?如果是这种情况,则删除asp.net使用的auth cookie以确定用户是否经过身份验证(不同于授权)。 “false”表示它不是持久性的(相当于登录表单中的“记住我?”选项。

至于你的用户为什么是NULL,我建议在GetUser调用之前放置一个断点,并查询你的用户数据存储,看它是否真的存在。