2016-11-18 6 views
-1

ログイン成功後にユーザーデータにアクセスしようとすると、NullReferenceExceptionが発生します。ここでの照会は、サインインプロセスで照会されるユーザーデータがいつ実際に入手可能かについてです。SingInManagerを呼び出して成功を返すと、ユーザーデータが利用できません。

[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テーブルから?

ご協力いただきますようお願い申し上げます。

+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); 

へのawaitと2回目の呼び出しを試してみましたが、それが魅力のように働きました。

0

あなたはユーザーオブジェクトが空であると言っていますか?

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

ここに例外を掲載してください。これについて詳しくお伝えください。

エンティティフレームワークのユーザテーブルにCompanyIdカラムもありますか?

+0

System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されておらず、CompanyIdが、最初にApplicationUserクラスにプロパティを追加して編集したテーブルにないのではなく、データベースに値がある – Nate58

関連する問題