C# MVC4网络安全。首次登录失败,可以';无法在登录方法中获取用户

C# MVC4网络安全。首次登录失败,可以';无法在登录方法中获取用户,c#,security,asp.net-mvc-4,login,simplemembership,C#,Security,Asp.net Mvc 4,Login,Simplemembership,好吧,一个下午就要完蛋了,我同意这样做。我的登录方式很标准。如下所示,我使用的是WebSecurity.Login 在这之后,我想运行一个检查,看看用户的配置文件是否完成,如果没有,将它们发送到该视图 控制器 [AllowAnonymous] [HttpPost] [ValidateAntiForgeryToken] public ActionResult Login(LoginModel model, string returnUrl) { if (ModelState.IsValid

好吧,一个下午就要完蛋了,我同意这样做。我的登录方式很标准。如下所示,我使用的是WebSecurity.Login

在这之后,我想运行一个检查,看看用户的配置文件是否完成,如果没有,将它们发送到该视图

控制器

[AllowAnonymous]
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
    if (ModelState.IsValid && WebSecurity.Login(model.Email, model.Password, persistCookie: model.RememberMe))
    {

        if (!User.IsInRole("User"))
        {
            if (!IsProfileComplete(WebSecurity.GetUserId(User.Identity.Name)))
            {
                return RedirectToAction("ProfileCompletion");
            }

            if(!User.IsInRole("User")) Roles.AddUserToRole(User.Identity.Name, "Vendor");
        }
        else // user has role
        {
            return RedirectToAction("Index", "Dashboard");
        }
    }

    ModelState.AddModelError("", "Unknown username or password.");
    return View(model);
}
在WebSecurity.Login之后,我感觉WebSecurity用户数据会被设置,但是WebSecurity.GetUserId(user.Identity.Name)返回为-1

即使用户已完成配置文件,它也会将其重定向到配置文件完成,因为它正在尝试查找userid-1的配置文件

关于http post和登录上下文集,我是否缺少什么?我要寻找的最终结果是确保用户在进入系统之前完成了配置文件页面。也许有更好的办法

编辑-----

找到此链接,但如果有人能为我所需的功能提供更好的模式,我仍然希望您能给我一个快速的评论


正如您找到的帖子所指出的,登录后不会立即设置用户标识,因此user.identity.Name不包含用户名。改用model.UserName。尝试更改此行:

if (!IsProfileComplete(WebSecurity.GetUserId(User.Identity.Name)))
为此:

if (!IsProfileComplete(WebSecurity.GetUserId(model.UserName)))