2011-08-20 6 views
11

Bir createuserwizard denetimi kullanıyorum. Oluşturucu Etkinliği'nde, kullanıcıyı bir role eklemek için bu kodu yerleştirdim. Ben de istiyorumFormsAuthentication.SetAuthCookie ne yapar

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); 
    } 

ne için kullanılır ne FormsAuthentication.SetAuthCookie(RegisterUser.UserName, false /* createPersistentCookie */); aracı ve bilmek ve Membership.GetUser() boş olmasının nedeni.

+0

Varsayılan üyelik sağlayıcısı, oturum açmış olan kullanıcı için her işaretlediğinizde tanımlama bilgisi denetlemez, ancak daha önceki istek işleme aşamasında denetler. Aynı istek için null SetAuthCookie ', ama bir sonraki istek kullanıcı göreceksiniz.Onlar bu geri zekalı olduğunu ve etrafında almak için basit bir yol arıyorum ... – bambams

cevap

12

CreateUserWizard üzerinde LoginCreatedUser="false" veya DisableCreatedUser="true" var mı?

kullanıcı an giriş olmadığından, boş dönmek.

kullanıcı set, hemen kaydedilebilir istiyorsanız Membership.GetUser() hemen giriş yapmış olmaktan kullanıcıyı engellemek ve neden olacaktır olanlar ne ya üzerinde hem LoginCreatedUser="true" hem de DisableCreatedUser="false". Bu mevcut kodunuzu çalıştırmalı. Kullanıcı oturumunu başlatmak için bir tarayıcı çerezi belirler. Bir sayfa sunucuya her gönderildiğinde, kullanıcının oturum açmasını sağlayan şey budur. createPersistentCookie, tarayıcı kapatıldığında zaman kaybetmeyen kalıcı bir çerez oluşturur, böylece kullanıcı siteye geri dönüp otomatik olarak oturum açabilir. Kullanıcının Giriş formundaki "Beni hatırla" onay kutusunu işaretleyip kontrol etmediğine bağlı olmalıdır. Varsayılan olarak CreateUserWizard formunda mevcut değildir, ancak isterseniz şablonunuza bir onay kutusu ekleyebilirsiniz.

Kullanıcının otomatik olarak oturum açmasını istemiyorsanız, kodunuzdan FormsAuthentication.SetAuthCookie() satırını kaldırın ve CreateUserWizard özelliklerini uygun şekilde ayarlayın. Kullanıcıları giriş yapmadan önce onaylamak isterseniz, DisableCreatedUser="true"'u ayarlayın. Bu, kullanıcı IsApproved=true'u, IIS Yöneticisindeki .Net Kullanıcıları modülünden ayarlayana veya kullanıcıları onaylamak için özel bir web sayfasına sahip olana kadar oturum açmasını engeller. Kullanıcıyı oluşturduktan sonra

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

, bunları hemen kaydedilebilir istiyorum:

Hala kullanıcı oluşturulduğunda bunları oturum gerek kalmadan uygun rolüne kullanıcı ekleme ayarlayabilirsiniz doğru? Bu durumda, kullanıcının kimlik doğrulaması yapılıp yapılmadığını (yetkili olandan farklı) belirlemek için asp.net tarafından kullanılan kimlik doğrulama çerezini bırakırsınız. "False", kalıcı değil (oturum açma formunda "Beni hatırla" seçeneğiyle eşdeğer) demektir

Kullanıcınızın NULL olduğu konusunda, GetUser çağrısından hemen önce bir kesme noktası koymanızı öneririm. Kullanıcı veri deposu, gerçekten orada olup olmadığını görmek için

+0

Merhaba Juan, http: //stackoverflow.com/questions/16302505/asp-net-authentication –

+0

Gördüm cevap verdi. Üzgünüm mesajlarımı son zamanlarda kontrol etmedim :-) –