将asp.net从WebForms迁移到MVC时形成身份验证问题

时间:2012-05-22 13:55:18

标签: c# jquery asp.net asp.net-mvc forms-authentication

我正在逐步将我的项目从asp.net web表单升级到MVC4。在第一步中,我更改了登录页面和其他几页。我正在使用表单身份验证,我自己的逻辑(没有成员资格) - 我检查数据库表的用户名/密码。如果没有问题,则将用户重定向到其目的地。 我的登录代码是:

的Web.config:

<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上的“授权”部分,它将正常工作,但现在我有两个问题:

  1. 我必须在每个控制器上放置[authorize]属性
  2. 我的网络表单不会在表单身份验证中(可以直接访问而无需登录!!)
  3. 我做错了什么?

1 个答案:

答案 0 :(得分:2)

如果您在web.config中定义授权,则不需要AllowAnonymousAttribute。

话虽如此,您似乎没有将AjaxLogin添加到授权列表中。这是必要的,因为否则会阻止Ajax请求。你需要〜/ Login和〜/ Account / AjaxLogin路径。您可能还需要〜/帐户/登录路径,但我不确定。