1

我的自定义成员资格提供程序有问题,它扩展了 ExtendedMembershipProvider。

运行成功执行我的已实现验证方法的 WebSecurity.Login 后,未设置 User.Identity.IsAuthenticated。

但是检查 WebSecurity.IsAuthenticated 是真的。此外,CurrentUserName 是用我的用户名设置的。但 CurrentUserId 显示“已引发异常”。

如果我检查异常,并且在检查了代码之后,我发现我的 Provider 的 GetUser(string username, bool isUserOnline) 方法将用户名参数接收为 null ...

4

2 回答 2

0

我刚刚发现了我的问题。在我的控制器的登录操作中,我正在返回一个视图。据我了解,我必须 RedirectToAction 因为用户是在发出请求后设置的。

这就是我所拥有的:

public ActionResult Index(LoginModel model)
{
    if (ModelState.IsValid)
    {
        WebSecurity.Login(model.Email, model.Password, model.RememberMe)
    }

    return View(model);
}

这就是我现在拥有的,并且有效:

public ActionResult Index(LoginModel model)
{
    if (ModelState.IsValid && WebSecurity.Login(model.Email, model.Password, model.RememberMe))
    {
        return RedirectToAction("Index", "Home");
    }

    return View(model);
}
于 2013-09-09T22:55:24.420 回答
0

我遇到过同样的问题。在我的情况下,没有创建会话,因为它被设置为不同的域。请更改它或删除您的 web.config 文件中的域,如下所示。

 <authentication mode="Forms">
      <forms name="test" loginUrl="/login" protection="All" path="/" domain=".xxxx.xx" />
 </authentication>
于 2018-04-28T05:13:29.703 回答