¿Cuál es la mejor manera de hacer que algunas páginas en asp.net requieran inicio de sesión?

StackOverflow https://stackoverflow.com/questions/477607

Pregunta

Estoy trabajando con el proyecto del sitio web asp.net de que algunas páginas necesitan autenticación. Estoy usando la membresía asp.net.

Leí algunas respuestas. p.ej. cree todas esas páginas en la carpeta y cree web.config interno que describa el privilegio. Esta es una forma de resolver el problema, pero necesito una forma que sea más reparable y efectiva.

¿Fue útil?

Solución

Si no desea codificar esto en web.config (s), deberá implementar una " Base Page " control de tipo.

Su clase de página base debe heredar de System.Web.UI.Page, y necesitaría tener un método al que pueda llamar para decir " El usuario debe iniciar sesión " o "El usuario debe estar en la función x", y si el usuario no está en esa función, redirija a la página de inicio de sesión (puede obtener esto llamando a FormsAuthentication.LoginUrl ).

Sus páginas reales deben heredar de esta clase en lugar de directamente de System.Web.UI.Page. Luego, en algo como Init, o en la parte superior de Page_Load, llame

base.UserMustBeLoggedIn();

o

// Replace "AccessRole" with the name of your role
base.UserMustBeInRole("AccessRole");

Y deje que la página base maneje esto.

Si prefiere tener los derechos de acceso almacenados en una base de datos, puede mover todo el procesamiento a la página base, y en un lugar adecuado en el ciclo de vida de la página, verifique la URL actual en la tabla de la base de datos, verifique los usuarios rol / autenticación según los requisitos y redirigir según sea necesario.


Tenga en cuenta que puede crear seguridad a nivel de página en la configuración web de esta manera:

<configuration>
  <location path="LockedPage.aspx">
    <system.web>
      <authorization>
        <!-- Deny access to anonymous users -->
        <deny users="?"/>
      </authorization>
    </system.web>
  </location>
</configuration>

Hay más información disponible en MSDN: El elemento de ubicación y < a href = "http://msdn.microsoft.com/en-us/library/532aee0e.aspx" rel = "noreferrer"> El elemento de autorización .

Otros consejos

Puedes probar este código, En el evento de carga de la página maestra, escriba este código, agregar una propiedad

public bool m_bLoginRequired = true;

public bool IsLoginRequired
{
    get { return m_bLoginRequired; }
    set { m_bLoginRequired = value; }
}



try
        {
            // Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache);
            Response.Cache.SetNoStore();
            if (IsLoginRequired==true)
            {
                    if ( Session.IsNewSession  || HttpContext.Current.Session["Username"] == null)
                    {
                        FormsAuthentication.SignOut();
                        FormsAuthentication.RedirectToLoginPage("Session Expired");
                        Response.End();
                    }
                }
            }
        catch (Exception ex)
        {
            throw (ex);
        }

ahora en la página de inicio de sesión necesita escribir este código

FormsAuthentication.SetAuthCookie(this.txt_UserName.Text.Trim(), false);  FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, this.txt_UserName.Text.Trim(), DateTime.Now, DateTime.Now.AddMinutes(10), false, "HR");
            HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,  FormsAuthentication.Encrypt(ticket));
            cookie.Name = "jay";
            Session["UserName"] = txt_UserName.Text.Trim();
            Response.Cookies.Add(cookie);
            txt_UserName.Text = "";
            txt_Password.Text = "";
            Response.Redirect("HomePage2.aspx");

ahora puede agregar un evento pageinit en la página de inicio de sesión

protected void Page_PreInit(object sender, EventArgs e)
    {
        Master.IsLoginRequired = false; 
    }

si desea que el usuario pueda acceder a una página no autorizada, entonces en el evento pageinit de esa página

establezca el Master.IsLoginRequired=false;

también especifique el loginurl en el archivo web.config .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top