将 asp.net 从 WebForms 迁移到 MVC 时出现窗体身份验证问题
本文关键字:窗体 问题 身份验证 MVC net asp WebForms 迁移 | 更新日期: 2023-09-27 18:34:53
我正在逐步将我的项目从 asp.net Web 表单升级到 MVC4。在第一步中,我更改了登录页面和其他几个页面。我正在使用表单身份验证,具有我自己的逻辑(无成员资格( - 我根据数据库表检查用户名/密码。如果正常,用户将被重定向到其目标。我的登录代码是:
网络配置:
<authentication mode="Forms">
<forms loginUrl="~/LogIn" name=".ASPXFORMSAUTH" timeout="150" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
登录控制器:
[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() });
}
}
当我尝试登录时,我收到http 302并重定向回登录。如果我删除 web.config 上的"授权"部分,它将正常工作,但现在我有两个问题:
- 我必须在每个控制器上放置 [授权] 属性
- 我的网络表单不会在表单身份验证中(无需登录即可直接访问!!
我做错了什么?
如果您在 web.config 中定义授权,则不需要 AllowAnonymousAttribute。
话虽如此,您似乎没有将AjaxLogin添加到授权列表中。 这是必要的,因为否则 Ajax 请求将被阻止。 您需要 ~/Login 和 ~/Account/AjaxLogin 路径。 您可能还需要一个~/帐户/登录路径,但我不确定。