当我尝试访问成功登录后的用户数据时,我得到一个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);
效果很好