0

我有一个asp.net mvc 站点的问题。似乎“注销”部分无法正常工作。我可以登录,没问题,但是当我注销时,我的代码会引发错误,而不是重定向到登录页面。我使用 VisualStudio 中的“起始页”。

我的 web.config:

<authentication mode="Forms">
  <forms
      name="MyCookie"
      loginUrl="~/Account/LogOn"
      protection="All"
      slidingExpiration="false"
      path="/"
      timeout="1"/>
</authentication> 

登录功能:

        [HttpPost]
    public ActionResult LogOn(LogOnModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            if (Membership.ValidateUser(model.UserName, model.Password))
            {
                FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                    && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
                {
                    return Redirect(returnUrl);
                }
                else
                {
                    return RedirectToAction("Index", "Home");
                }
            }
            else
            {
                ModelState.AddModelError("", "The user name or password provided is incorrect.");
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

我每三秒就有一个循环。使用 ajax 调用一个函数,当我注销时(在 web.config 中配置的 1 分钟后)我得到一个错误而不是登录页面。

用ajax调用的函数

        [ActionName("StudentHelp")]
    [Authorize]
    [OutputCache(Duration = 3, VaryByParam = "none")]
    public ActionResult StudentHelp()
    {
        var teacher = Membership.GetUser();

        using(var db = new DbEntities())
        {
            var studentUserIds = (from p in db.Help
                                    where p.TeacherId == (Guid) teacher.ProviderUserKey
                                    && p.IsHelped == false
                                    select p).ToList();

            IList<StudentModel> students = studentUserIds.Select(studentUserId => new StudentModel(studentUserId.StudentId)).ToList();

            return PartialView("_StudentHelp", students);
        }
    }

有什么线索吗?

谢谢/迈克

4

1 回答 1

0

您收到错误而不是登录页面的原因是因为您没有StudentHelp使用属性修饰您的操作,这[Authorize]意味着未经身份验证的用户可以调用此操作。除了在此操作中您试图获取当前登录的用户 ( Membership.GetUser()) 之外,当不再有登录用户时(因为他的身份验证 cookie 已过期),它将返回 null。然后在您使用的 LINQ 查询中,teacher.ProviderUserKey但由于teacher变量为 null,您会得到一个NullReferenceException.


更新:

由于一个已知问题,您可能需要将 follownig 键添加到您的 web.config:

<appSettings>
    <add key="loginUrl" value="~/Account/LogOn" />
<appSettings>

发行说明还建议添加以下内容,但到目前为止,当我测试它时,这对我不起作用:

<add key="autoFormsAuthentication" value="false" />
于 2012-05-02T07:46:20.583 回答