Problemas de autenticación de formularios al migrar asp.net de WebForms a MVC
Frecuentes
Visto 504 veces
0
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:
- Tengo que poner el atributo [autorizar] en cada controlador
- 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?
1 Respuestas
2
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
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# jquery asp.net asp.net-mvc forms-authentication or haz tu propia pregunta.
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