2009-05-26 8 views
28

que estoy tratando de conseguir el proveedor de suscripciones a trabajar.ASP.NET Composición: cómo configurar el usuario como conectado

hasta ahora tengo:

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

llamando:

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? 
    } 
} 

Si entro en la correcta de usuario/contraseña, la función devuelve true ValidateUser. Entonces mi pregunta es: ¿cómo configuro al usuario como conectado?

estoy probando esto en mis páginas haciendo:

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

habría utilizado las funciones por defecto, pero simplemente no está funcionando y una búsqueda en Google me hizo pensar que voy a ahorrar tiempo en realidad recodificación todo eso yo mismo.

Cualquier cosa ayudará!

EDIT: En cuanto a la respuesta aceptada, es la correcta para "cómo configurar al usuario como inició sesión" y funciona bien. No solucionó mi problema específico, sino solo una parte de él. Pensé que si miraba los comentarios, encontrará indicadores interesantes.

EDIT 2 y la solución: Ok finalmente trabajado a cabo gracias a todos los comentarios. Esto es lo que hice, es más sencillo de lo que esperaba:

página que comprueba el estado de inicio de sesión:

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

Desconectar: ​​

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

web.config:

<authentication mode="Forms" /> 

entrada:

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

    } 
} 

Respuesta

36

Pon esto en Login1_Authenticate antes de llamar Response.Redirect("/admin/default.aspx");

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

todavía conseguir atrapado por si (Membership.GetUser() == nu ll). ¿Debo tratar de obtener el estado de inicio de sesión de alguna otra manera? – marcgg

+0

IMO, solo debería tratar con este tema de inicio de sesión en la página Login.aspx. El SetAuthCookie funciona, lo he usado antes. Si no funciona para usted, hay algo en algún otro lugar en su código que lo está arruinando :( – Gromer

+0

Todo mi código está allí. Lo que trato de hacer en otro lugar que no sea en la página de inicio de sesión es "si no ha iniciado sesión y luego ha vuelto a dirigir a la página de inicio de sesión. " – marcgg

2

Gromer tiene la respuesta, pero también se puede echar un vistazo a este artículo de MSDN para obtener más información:

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

+0

Como dije, suena correcto pero no funciona, ya que no puedo lograr que el usuario inicie sesión correctamente. Debe ser obvio, pero soy nuevo en .net – marcgg

6

trate de mover su código y la sugerencia de Gromer para el evento LoggedIn.

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

    } 

EDIT: Al igual que Gromer dicho, sólo hacer esto si tiene que ejecutar algún código de negocio después de que el usuario ha iniciado sesión y antes de s/es redirigido.

EDITAR EDITAR: Visual Studio describe el evento Autenticar como "llamada para autenticar al usuario", lo que implica que el usuario no está autenticado antes de que el evento se llama. Por lo tanto, no puede confirmar que el usuario haya iniciado sesión porque todavía no se ha autenticado.

+0

¿cuál es exactamente el evento loggedIn? – marcgg

+0

Es un evento llamado por el control de inicio de sesión después de que un usuario se autentica. Consulte http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.login.loggedin.aspx –

+0

gracias. – marcgg

1

Aunque no sé cuánta ayuda será, este es un código repetitivo que utilizo para discernir entre usuarios administradores o usuarios habituales. Funciona muy bien para mi

En su página de inicio de sesión, probablemente onclick crear el objeto de usuario y llamar alguna función con este código (UserRole es una enumeración con sus papeles):

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 

En su web.config:

<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> 

... y si realmente quiere, en su página Global.asax:

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 
Cuestiones relacionadas