如何获取Identity 3.0中的当前UserId? User.GetUserId返回null
我需要获取提出请求的用户的ID。 在之前版本的Identity中,我可以这样做:
User.Identity.GetUserId();
但它似乎不再可用。
还有类似的东西:
User.GetUserId();
但它总是返回null,即使User.Identity.IsAuthenticated在true和User.Identity.Name中设置正确。
我应该用什么来做到这一点?
编辑:我的authenticaton逻辑是基于[默认Visual Studio 2015模板],我迄今没有改变太多的身份,所以如果你想检查它是如何完成的,你可以简单地看到它在我粘贴的github链接。
根据我们的讨论,看起来您的用户身份不包含User.GetUserId()所使用的正确声明。
以下是您可以如何手动设置NameIdentifier声明:
// ClaimsIdentity identity = new ClaimsIdentity...
identity.AddClaim(ClaimTypes.NameIdentifier, user.Id);
我认为在以前的版本中有一个内置的扩展方法,但是它们删除了它。 你可以实现你自己的替换它:
using System;
using System.Security.Claims;
using Microsoft.AspNet.Identity;
namespace cloudscribe.Core.Identity
{
public static class ClaimsPrincipalExtensions
{
public static string GetUserId(this ClaimsPrincipal principal)
{
if (principal == null)
{
throw new ArgumentNullException(nameof(principal));
}
var claim = principal.FindFirst(ClaimTypes.NameIdentifier);
return claim != null ? claim.Value : null;
}
}
}
ClaimType.NameIdentifier应映射到用户标识
@Joe Audette
原来它已经转移到其他地方。
User.GetUserId => UserManager.GetUserId(User)
User.GetUserName => UserManager.GetUserName(User)
User.IsSignedIn => SignInManager.IsSignedIn(User)
github上的详细信息
链接地址: http://www.djcxy.com/p/22383.html上一篇: How to get current UserId in Identity 3.0? User.GetUserId returns null
下一篇: dnx451 RC1 What happened to InMemorySymmetricSecurityKey?