How to get User Name from External Login in ASP.NET Core?

How to get User Name from External Login in ASP.NET Core?

 

回答1

Do you have access to SignInManager or can you inject it? If yes, then this is how you would access user id (username), email, first & last name:

public class MyController : Microsoft.AspNetCore.Mvc.Controller
{
    private readonly UserManager<ApplicationUser> _userManager;
    private readonly SignInManager<ApplicationUser> _signInManager;

    public MyController (
        UserManager<ApplicationUser> userManager,
        SignInManager<ApplicationUser> signInManager
    )
    {
        _userManager = userManager;
        _signInManager = signInManager;        
    }

    public async Task<IActionResult> MyAction(){
    ExternalLoginInfo info = await _signInManager.GetExternalLoginInfoAsync();
    string userId = info.Principal.GetUserId()
    string email = info.Principal.FindFirstValue(ClaimTypes.Email);
    string FirstName = info.Principal.FindFirstValue(ClaimTypes.GivenName) ?? info.Principal.FindFirstValue(ClaimTypes.Name);
    string LastName = info.Principal.FindFirstValue(ClaimTypes.Surname);
    }
}

GetUserId extension:

public static class ClaimsPrincipalExtensions
{
    public static string GetUserId(this ClaimsPrincipal principal)
    {
        if (principal == null)
            return null; //throw new ArgumentNullException(nameof(principal));

        string ret = "";

        try
        {
            ret = principal.FindFirst(ClaimTypes.NameIdentifier)?.Value;
        }
        catch (System.Exception)
        {                
        }
        return ret;
    }
}

 

实际使用的时候,是这样

var info = await _signInManager.GetExternalLoginInfoAsync();
            if (info == null)
            {
                return RedirectToLocal("/Identity/Account/Login");
            }

            var identity = info.Principal.Identity;
            var userName = identity.Name;
            if (!identity.IsAuthenticated)
            {
                return RedirectToLocal("/Identity/Account/Login");
            }
            Console.WriteLine(userName);

 

作者:Chuck Lu    GitHub    
posted @   ChuckLu  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2022-08-07 租鸡青一是什么意思,租鸡青一是什么梗
2019-08-07 HearthBuddy遇奥秘解决方法
2019-08-07 HearthBuddy 突袭 rush
2019-08-07 HearthBuddy 复生 reborn
2015-08-07 Static Classes and Static Class Members
点击右上角即可分享
微信分享提示