在调用SingInManager并返回一个成功的MVC5后,没有可用的用户数据



当我尝试访问成功登录后的用户数据时,我得到一个NullReferenceException。这里的查询是关于在登录过程中何时可以查询用户数据。下面是我放置到Account控制器的Login方法中的代码:

  [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }
        // This doesn't count login failures towards account lockout
        // To enable password failures to trigger account lockout, change to shouldLockout: true
        var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
        switch (result)
        {
            case SignInStatus.Success:
                var sh = new SoapHelper();
                var user = UserManager.FindById(User.Identity.GetUserId());
                Session["UserExists"] = true;
                Session["StartDate"] = DateTime.Now.ToString("yyyyMMdd");
                Session["EndDate"] = DateTime.Now.ToString("yyyyMMdd");
                Session["UserCompany"] = user.CompanyID;

最后一行代码是抛出错误的地方,我是否无法访问UserManager以在登录过程中此时从User表获取我需要的数据?

任何帮助将非常感激!

你的意思是说用户对象是空的吗?

var user = UserManager.FindById(User.Identity.GetUserId());

请您在这里张贴例外情况,以便我们提供更多有关此的详细信息。

也有CompanyId列在用户表在实体框架?

经过更多的研究和测试,我发现了为什么你不能在与SignInManager的同一调用中使用User.Identity.Name。PasswordSignInAsync就是该用户。使用来自身份验证cookie的声明填写的身份(尚未解析)。

所以我尝试了第二个呼叫,并等待UserManager

var user = await UserManager.FindAsync(model.Email, model.Password);

效果很好

相关内容

  • 没有找到相关文章

最新更新