如何获取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?