2016-11-18 40 views
-1

我在嘗試訪問成功登錄後的用戶數據時收到NullReferenceException。這裏的查詢是關於在登錄過程中用戶數據實際上可以被查詢的時間。這裏是我已經放入賬戶控制器的登錄方法的代碼:調用SingInManager並返回成功後沒有用戶數據可用MVC5

[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得到我所需要的數據從用戶表中此時在登錄過程中?

任何幫助將不勝感激!

+0

'user'是否成功返回? User.Identity.GetUserId()是否返回一個值? –

+0

我能解決我的問題,但不能接受我自己的答案,請參閱下文。 – Nate58

回答

0

經過一些更多的研究和測試之後,我發現在與SignInManager.PasswordSignInAsync的同一次調用中不能使用User.Identity.Name的原因是User.Identity用來自認證cookie的聲明(它們是尚未分析)。

所以我試圖用一個等候第二次調用的UserManager

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

和它的工作就像一個魅力。

0

你的意思是說用戶對象是空的嗎?

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

請您在這裏發佈例外,以便我們可以提供更多關於此的細節。

在實體框架中的用戶表中是否還有CompanyId列?

+0

System.NullReferenceException:對象引用未設置爲對象的實例,並且沒有CompanyId最初不在它們提供給您的表中我通過向ApplicationUser類添加屬性對其進行編輯,並且它在我的數據庫中有一個值 – Nate58

相關問題