Problemas de autenticación de formularios al migrar asp.net de WebForms a MVC

Estoy actualizando mi proyecto de formularios web asp.net a MVC4, paso a paso. En el primer paso, cambié la página de inicio de sesión y algunas otras páginas. Estoy usando la autenticación de formularios, con mi propia lógica (sin membresía): verifico el nombre de usuario/contraseña en una tabla de base de datos. Si está bien, el usuario es redirigido a su destino. Mi código de inicio de sesión es:

Web.config:

<authentication mode="Forms">
    <forms loginUrl="~/LogIn" name=".ASPXFORMSAUTH" timeout="150" />
</authentication>
<authorization>
    <deny users="?" /> 
</authorization>

Controlador de inicio de sesión:

[AllowAnonymous]
[HttpPost]
public ActionResult AjaxLogin(FormCollection postedFormData)
{
    try
    {
        string userName = postedFormData["Login_UserName"];
        string password = postedFormData["Login_Password"];
        UserEntity userEntity = new UserEntity(Utilities.AuthenticateUser(userName, password, 1));

        Session["UserEntity"] = userEntity;

        FormsAuthentication.SetAuthCookie(userEntity.Key.Id.ToString(), false);

        return Json(new { redirectToUrl = "./AccountSelection", error = "false", lan = Thread.CurrentThread.CurrentUICulture.ToString() });
    }
    catch (Exception ex)
    {
         return Json(new { redirectToUrl = "", error = ExceptionHandler.HandleException(ex), lan = Thread.CurrentThread.CurrentUICulture.ToString() });
    }
}

Cuando intento iniciar sesión, obtengo http 302 y me redirigen de nuevo para iniciar sesión. Si elimino la sección "autorización" en web.config, funcionará bien, pero ahora tengo dos problemas:

  1. Tengo que poner el atributo [autorizar] en cada controlador
  2. Mis formularios web no estarán dentro de la autenticación de formularios (¡se puede acceder directamente sin iniciar sesión!)

¿Qué estoy haciendo mal?

preguntado el 22 de mayo de 12 a las 14:05

1 Respuestas

Si está definiendo su autorización en web.config, no necesita un AllowAnonymousAttribute.

Habiendo dicho eso, no parece que esté agregando AjaxLogin a su lista de autorización. Esto es necesario porque, de lo contrario, se bloqueará la solicitud de Ajax. Necesita las rutas ~/Login y ~/Account/AjaxLogin. Es posible que también necesite una ruta ~/Cuenta/Inicio de sesión, pero no estoy seguro de eso.

contestado el 22 de mayo de 12 a las 15:05

Gracias por la ayuda. Intenté agregar "~/Secure/AjaxLogin" a web.config, pero no ayudó. (Le di la ruta de ruta, al controlador): <location path="~/Login"> <system.web> <authorization> <allow users="*"/> </authorization> </system.web> </location> <location path="~/Secure/AjaxLogin"> <system.web> <authorization> <allow users="*"/> </authorization> </system.web> </location> - Yaniv Efraim

@Yaniv: ¿cambió el nombre del controlador a SecureController? - Erik Funkenbusch

Sí, lo hice, el controlador se llama "SecureController". ¿Es ese el problema? - Yaniv Efraim

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.