2009-05-26 24 views
28

Üyelik Sağlayıcısı çalışmasına çalışıyorum.ASP.NET Üyeliği: kullanıcı oturum açmış olarak nasıl ayarlanacağı

Şimdiye kadar var:

<asp:Login ID="Login1" runat="server" OnAuthenticate="Login1_Authenticate"> 
</asp:Login> 

arayarak: Ben Doğru giriş/şifre girerseniz

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) 
{ 
    if(Membership.ValidateUser(Login1.UserName, Login1.Password)) 
    { 
     Response.Redirect("/admin/default.aspx"); 
     // Set the user as logged in? 
    } 
} 

, ValidateUser fonksiyonu true döndürür. Yani sorum şu: Kullanıcıyı oturum açmış olarak nasıl ayarlayabilirim?

yaptığım benim sayfalarında bu test ediyorum:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Membership.GetUser()==null) 
    { 
     Response.Redirect("/admin/login.aspx"); 
    } 
    // else "you are logged in, congratulations"     
} 

varsayılan fonksiyonları kullanılmış olurdu, ama sadece çalışmıyor ve bir google arama beni ben aslında kod değiştirme işleminden zaman kazandıracak düşündürdü tüm bunlar kendim.

Her şey yardımcı olacaktır!

EDIT EDIT: Kabul edilen yanıtla ilgili olarak, "oturum açmış olarak kullanıcı nasıl ayarlanacağı" doğrudur ve iyi çalışır. Benim özel problemimi çözmedi ama sadece bir parçasını. Düşüncelerinizi düşündüğünüz düşünürseniz, ilginç işaretçiler bulacaksınız.

DÜZENLEME 2 ve çözüm: Tamam Sonunda tüm yorumlar sayesinde çalıştım.

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Request.IsAuthenticated) 
    { 
     Response.Redirect("/admin/login.aspx"); 
    } 

Giriş: Çıkış: Giriş durumunuz denetler

Sayfa: İşte o beklediğim daha basittir, ne yaptığını

protected void LoginStatus1_Logout(object sender, LoginCancelEventArgs e) 
    { 
     FormsAuthentication.SignOut(); 
     Response.Redirect("/admin/login.aspx"); 
    } 
} 

web.config:

<authentication mode="Forms" /> 

oturum açma:

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) 
{ 
    if(Membership.ValidateUser(Login1.UserName, Login1.Password)) 
    { 
     FormsAuthentication.SetAuthCookie(Login1.UserName, true); 
     Response.Redirect("/admin/default.aspx"); 

    } 
} 

cevap

36

Response.Redirect("/admin/default.aspx");

FormsAuthentication.SetAuthCookie("username", true); 
+0

hala if (Membership.GetUser() == nu tarafından catched olsun II). Giriş durumunu başka bir şekilde almaya çalışmalı mıyım? – marcgg

+0

IMO, yalnızca Login.aspx sayfasında bu giriş bilgisiyle ilgilenmelisiniz. SetAuthCookie çalışıyor, daha önce kullandım. Eğer sizin için işe yaramıyorsa, kodunuzda başka bir yerde başka bir şey vardır: ( – Gromer

+0

Tüm kodum orada. Giriş sayfasından başka bir yerde yapmaya çalıştığım şey "eğer Giriş yapmadınız, daha sonra giriş sayfasına yönlendirme ". – marcgg

2

Gromer cevabı vardır çağırmadan önce Login1_Authenticate koy, ama aynı zamanda daha fazla bilgi edinmek için bu MSDN makalesine göz atabilirsiniz:

http://msdn.microsoft.com/en-us/library/ms998347.aspx

+0

Dediğim gibi, kulağa doğru geliyor ama kullanıcının başarılı bir şekilde giriş yapmasını sağlayamadığım için işe yaramıyor. Açık olması gerekiyor ama ben yeni .net – marcgg

6

taşımayı deneyin senin kodu ve Gromer'in LoggedIn olayı önerisi.

protected void Login1_LoggedIn(object sender, EventArgs e) 
    { 
     if(Membership.ValidateUser(Login1.UserName, Login1.Password)) 
     { 
      FormsAuthentication.SetAuthCookie(Login1.UserName, true); 
      Response.Redirect("/admin/default.aspx"); 
     } 

    } 

DÜZENLEME: gibi Gromer söyledi, kullanıcı ve s öncesine kaydedilir sonra bazı iş kodu çalıştırmak için varsa sadece bunu/o yönlendirilir.

DÜZENLEME DÜZENİ: Visual Studio, Authenticate olayını "kullanıcının kimliğini doğrulamak için çağrılır" olarak tanımlar; bu, kullanıcının olayın çağrılmasından önce kimliği doğrulanmadığını ima eder. Böylece, kullanıcının henüz giriş yapmadığı için oturum açmış olduğunu doğrulayamazsınız.

+0

tam olarak oturum açan olay nedir? – marcgg

+0

Bir kullanıcının kimliği doğrulandıktan sonra oturum açma denetimi tarafından adlandırılan bir olaydır. Http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.login.loggedin.aspx –

+0

teşekkürler. – marcgg

1

Bunun ne kadar yardımcı olacağını bilmemekle birlikte, bu, yönetici kullanıcılar veya normal kullanıcılar arasında ayırt etmek için kullandığım klişe kodudur. Benim için harika çalışıyor. web.config içinde

If admin Then 
      If role = UserRole.Admin Then 
       RedirectFromLoginPage(username & "|" & userid, False) 
       Return True 
      Else 
       Return False 
      End If 
     Else 
      If String.IsNullOrEmpty(Current.Request.QueryString("ReturnUrl")) Then 
       SetAuthCookie(username & "|" & userid, True) 
      Else 
       RedirectFromLoginPage(username & "|" & userid, True) 
      End If 
      Return True 
     End If 

: giriş sayfasında

, muhtemelen onclick (UserRole sizin rolleri olan bir Enum olduğu) kullanıcı nesnesi oluşturmak ve bu kodla bazı işlev çağrısı

<location path="admin"> 
    <system.web> 
     <authorization> 
      <allow roles="Admin"/> 
      <deny users="*"/> 
     </authorization> 
    </system.web> 
</location> 
..... 
<system.web> 
<authentication mode="Forms"> 
     <forms loginUrl="/registration/login.aspx" timeout="129600"/> 
    </authentication> 
    <authorization> 
     <allow users="*"/> 
    </authorization> 
</system.web> 
Eğer gerçekten istiyorsan

... ve Global.asax sayfasında:

Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs) 
    If Request.IsAuthenticated Then 
'' 
'get your roles for the current user' 
'' 
Dim userRoles() As String = Split(roles, "|") 
     'Add the roles to the User Principal' 
     HttpContext.Current.User = New GenericPrincipal(User.Identity, userRoles) 
    End If 
End Sub 
İlgili konular