visual tutorial studio net custom asp c# asp.net asp.net-membership membership

c# - tutorial - membership asp net visual studio 2015



Membresía de ASP.NET: cómo configurar el usuario como registrado (4)

Estoy tratando de hacer que el Proveedor de Membresía trabaje.

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 ingreso el nombre de usuario / contraseña correcto, la función ValidateUser devuelve verdadero. Así que 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 usado las funciones predeterminadas, pero simplemente no funciona y una búsqueda en Google me hizo pensar que ahorraré tiempo al recodificar todo eso.

¡Cualquier cosa ayudará!

EDITAR : En cuanto a la respuesta aceptada, es la correcta para "cómo configurar el usuario como conectado" y funciona bien. No solucionó mi problema específico, sino solo una parte de él. Pensé que si miras bien los comentarios encontrarás interesantes indicaciones.

EDIT 2 y solución: Ok, finalmente lo resolví gracias a todos los comentarios. Esto es lo que hice, es más simple 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"); }

Cerrar sesión:

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

web.config:

<authentication mode="Forms" />

iniciar sesión:

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



Intente mover su código y la sugerencia de Gromer al 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"); } }

EDITAR: Como dijo Gromer, solo haga esto si tiene que ejecutar algún código de negocio después de que el usuario haya iniciado sesión y antes de que él / ella sea redirigido.

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


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

FormsAuthentication.SetAuthCookie("username", true);


Si bien no sé cuánta ayuda será, este es el código que utilizo para discernir entre usuarios administradores o usuarios regulares. Funciona muy bien para mí.

En su página de inicio de sesión, probablemente haga clic en crear su objeto de usuario y llamar a alguna función con este código (UserRole es un Enum con sus roles):

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 quieres, en tu página de 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