2011-08-20 43 views
11

我正在使用createuserwizard控件。在CreatedUser事件上,我放置了这段代码将用户添加到角色中。FormsAuthentication.SetAuthCookie做什么

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()为空。

+0

我认为默认的成员资格提供程序不检查cookie每次检查登录用户,而是检查它在早期的请求处理阶段,它会返回null对于同样的请求,你'SetAuthCookie',但下一个请求它会看到用户。我认为这是迟缓的,并寻找一种简单的方法来解决它... – bambams

回答

12

您的是否有LoginCreatedUser="false"DisableCreatedUser="true"

那些将防止登录立即用户,并导致Membership.GetUser()如果你想在马上登录的用户,设置为返回null,因为用户当前没有登录。

既不或CreateUserWizard上的LoginCreatedUser="true"DisableCreatedUser="false"。这应该让你当前的代码工作。

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

创建用户后,你希望他们在登录马上,正确?如果是这种情况,则删除由asp.net使用的auth cookie,以确定用户是否已通过身份验证(与授权不同)。至于为什么你的用户是NULL,我会建议在GetUser调用之前放置一个断点,然后查询你的用户数据存储,看看它是否真的存在

+0

嗨胡安,你能协助http: //stackoverflow.com/questions/16302505/asp-net-authentication –

+0

我看到它是回答。对不起,我最近没有查看我的消息:-) –