2017-04-07 102 views
1

我需要使用控制器中當前登錄的用戶ID。它總是返回null。我已經登錄了,這是我的代碼。User.Identity.GetUserId()總是在控制器操作中返回空值

if (string.IsNullOrEmpty(userId)) userId = User.Identity.GetUserId(); 

我試圖將基準

using Microsoft.AspNet.Identity; 

我也嘗試添加一個要求

public const string UserId = "http://schemas.xmlsoap.org/ws/2014/03/mystuff/claims/UserId"; 
userIdentity.AddClaim(new Claim(CustomClaimTypes.UserId, Id)); 

當我嘗試檢索要求,它給空爲好。

(identity as ClaimsIdentity).FirstOrNull(CustomClaimTypes.UserId); 

任何幫助,將不勝感激。

附加信息請求中的註釋:

這是由aspnetuser提供正常登錄。

 var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); 
     switch (result) 
     { 
      case SignInStatus.Success: 
       return RedirectToLocal(returnUrl); 
      case SignInStatus.LockedOut: 
       return View("Lockout"); 
      case SignInStatus.RequiresVerification: 
       return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe }); 
      case SignInStatus.Failure: 
      default: 
       ModelState.AddModelError("", "Invalid login attempt."); 
       return View(model); 
     } 

Request.IsAuthenticated返回true。

索賠在這裏添加。

public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) 
    { 
     // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType 
     var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); 
     // Add custom user claims here 
     userIdentity.AddClaim(new Claim(CustomClaimTypes.UserId, Id)); 

     return userIdentity; 
    } 

Cookies

+0

您如何登錄? – trailmax

+0

用登錄信息編輯我的問題。 –

+0

如果測試Request.IsAuthenticated是否返回true或false? –

回答

0

下面是答案,我設法得到它的工作。

我剛剛將User.Identity.GetUserId();移至輔助類方法。

我只想重申,請求不是登錄請求。它是登錄後的一個單獨的請求。

謝謝你們的時間。

相關問題