ASP.NET: Caso omiso al ReturnUrl en el control Login

Esta sencilla acción era lo que necesitaba Alexa (desde los newsgroup de ASP.NET)…quien me llevo a escribir este presente post.

Cual es la necesidad (.. de Alexa)??

No necesitaba la “funcionalidad” de redirección que realiza por defecto el Proveedor de Membresia cuando utilizamos la autenticación de formularios, cuando envía a la pagina de Login el parámetro por QueryString de ReturnUrl

Mas info: Flujo de control de autenticación de formularios

Porque por defecto cuando asignamos la seguridad y solicitamos la pagina:
     http://www.miempresa.com/principal.aspx
se redirección para la petición de credenciales (user/pass) a la pagina:
     http://www.miempresa.com/login.aspx?ReturnUrl=principal.aspx

La solución que recomendé, por no conocer otra posibilidad 😉 (escuchamos en los comentarios alguna otra alternativa)
Esto es similar a:

Solución

Al momento de logearse el usuario redireccionar al lugar deseado, esto es el evento LoggedIn

image

 

protected void Login1_LoggedIn(object sender, EventArgs e)
   {
       Response.Redirect("nuevaUbicacion.aspx");
   }

 

 

para Curiosos…

Para los curiosos con “El Gran Reflector.NET” nos da luz en las sombras, podremos ver como lo obtiene y ver como funciona algunos parámetros

image

Friend Shared Function GetReturnUrl(ByVal useDefaultIfAbsent As Boolean) As String
    FormsAuthentication.Initialize
    Dim current As HttpContext = HttpContext.Current
    Dim str As String = current.Request.QueryString.Item("ReturnUrl")
    If (str Is Nothing) Then
        str = current.Request.Form.Item("ReturnUrl")
        If ((Not String.IsNullOrEmpty(str) AndAlso Not str.Contains("/")) AndAlso str.Contains("%")) Then
            str = HttpUtility.UrlDecode(str)
        End If
    End If
    If ((Not String.IsNullOrEmpty(str) AndAlso Not FormsAuthentication.EnableCrossAppRedirects) AndAlso Not UrlPath.IsPathOnSameServer(str, current.Request.Url)) Then
        str = Nothing
    End If
    If (Not String.IsNullOrEmpty(str) AndAlso CrossSiteScriptingValidation.IsDangerousUrl(str)) Then
        Throw New HttpException(SR.GetString("Invalid_redirect_return_url"))
    End If
    If ((str Is Nothing) AndAlso useDefaultIfAbsent) Then
        Return FormsAuthentication.DefaultUrl
    End If
    Return str
End Function

En C# (para los que no le gusta leer Dim)

internal static string GetReturnUrl(bool useDefaultIfAbsent)
{
    Initialize();
    HttpContext current = HttpContext.Current;
    string str = current.Request.QueryString["ReturnUrl"];
    if (str == null)
    {
        str = current.Request.Form["ReturnUrl"];
        if ((!string.IsNullOrEmpty(str) && !str.Contains("/")) && str.Contains("%"))
        {
            str = HttpUtility.UrlDecode(str);
        }
    }
    if ((!string.IsNullOrEmpty(str) && !EnableCrossAppRedirects) && !UrlPath.IsPathOnSameServer(str, current.Request.Url))
    {
        str = null;
    }
    if (!string.IsNullOrEmpty(str) && CrossSiteScriptingValidation.IsDangerousUrl(str))
    {
        throw new HttpException(SR.GetString("Invalid_redirect_return_url"));
    }
    if ((str == null) && useDefaultIfAbsent)
    {
        return DefaultUrl;
    }
    return str;
}

 

 

 

Enlaces

3 comentarios en “ASP.NET: Caso omiso al ReturnUrl en el control Login”

  1. Hola José
    Te agradecería que me dieras una idéa del motivo por el que mi página de login no direcciona a la página default.aspx, tal vez es algo similar a lo que le pasaba a Alexa.
    Las páginas se llaman login.aspx y default.aspx, al igual que el web.config estan en la carpeta de wwwroot y en el web.config está definido:



    cuando me “logueo” en la página login y la autenticación es incorrecta, me arroja el error que configuré en la página, pero cuando la autencticación es exitosa me manda a la página del error 404 (que también defini en el web.config). Lo extraño es que cuendo en el web.config cambio el parámetro defaultUrl a defaultUrl=”~/default.htm” (otra página pero con extensión htm) sí me direcciona y no me manda ningun error. No creo que el error esté en el web.config. Alguna idéa? Gracias.

  2. Hola, tengo un sitio web con el problema de que al loguear no me permite redireccionar al registro de nuevos usuarios uso el control login con la propiedad CreateUserUrl=~SignUp.aspx para el registro pero no lo hace hay que programar algun evento?, le agradecere sus comentarios.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *