User.Identity.GetUserId() 在控制器操作中总是 returns null
User.Identity.GetUserId() always returns null in controller action
我需要在控制器中使用当前登录的用户 ID。它始终 returns 为空。我已经登录了。这是我的代码。
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));
当我尝试检索声明时,它也返回 null。
(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 returns 正确。
此处添加声明。
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
这是答案,我成功了。
我刚刚将 User.Identity.GetUserId();
移动到辅助 class 方法。
我只是想重申一下,请求不是登录请求。它是登录后的单独请求。
谢谢大家的宝贵时间。
我需要在控制器中使用当前登录的用户 ID。它始终 returns 为空。我已经登录了。这是我的代码。
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));
当我尝试检索声明时,它也返回 null。
(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 returns 正确。
此处添加声明。
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
这是答案,我成功了。
我刚刚将 User.Identity.GetUserId();
移动到辅助 class 方法。
我只是想重申一下,请求不是登录请求。它是登录后的单独请求。
谢谢大家的宝贵时间。