2011-08-20 80 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

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