How to get current UserId in Identity 3.0? User.GetUserId returns null

跟風遠走 提交于 2019-12-05 21:24:17

问题


I need to get ID of user that made some request. In previous versions of Identity I could do it like this:

User.Identity.GetUserId();

But it seems it isn't available anymore.

There is also something like:

User.GetUserId();

But it always returns null, even if User.Identity.IsAuthenticated in true and User.Identity.Name is set correctly.

What should I use to do it?

EDIT: My authenticaton logic is based on [default Visual Studio 2015 template], I hadn't changed much so far in identity, so if you want to check how is it done, you can simply see it on github link I pasted.


回答1:


Following our discussion, it seems your user identity does not contain the correct claim used by User.GetUserId().

Here is how you can manually set the NameIdentifier claim:

// ClaimsIdentity identity = new ClaimsIdentity...

identity.AddClaim(ClaimTypes.NameIdentifier, user.Id);



回答2:


I think there was a built in extension method for that in previous versions but they removed it. you can implement your own to replace it:

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 should map to userid




回答3:


@Joe Audette

it turns out it has been move to other place.

User.GetUserId => UserManager.GetUserId(User)
User.GetUserName => UserManager.GetUserName(User)
User.IsSignedIn => SignInManager.IsSignedIn(User)

detail on github




回答4:


My goal was to retrieve the UserId in a custom middleware this is what I used:

httpContext.User.Identity.IsAuthenticated ? 
    httpContext.User.Claims.Where(c => c.Type == ClaimTypes.NameIdentifier).First().Value 
    : Guid.Empty.ToString()



回答5:


User.Identity.GetUserId(); Is available inside a class that inherits Page.




回答6:


You can also use

User.Identity.Name;

For more information go to MSDN

https://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity(v=vs.110).aspx



来源:https://stackoverflow.com/questions/35577280/how-to-get-current-userid-in-identity-3-0-user-getuserid-returns-null

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!