asp.net 如何获取当前用户ID,如果我继承自IdentityUser?

lawou6xi  于 2023-10-21  发布在  .NET
关注(0)|答案(3)|浏览(176)

我在IdentityUser中添加一些字段,如

public class CustomUser: IdentityUser
    {
        public string field1 {get;set;}
        public string field2 {get;set;}
    }

迁移后,在SQL Management Studio上,我拥有所有数据,这些数据是用.OnModelCreating添加的
但是,我如何从当前授权的CustomUser获取任何字段(如ID)
我试着用

using Microsoft.AspNet.Identity;

CustomUser.Identity.GetUserId()

但它不起作用。
多谢帮忙!

3xiyfsfu

3xiyfsfu1#

在ASP.NET Core中,如果Controller继承了Microsoft.AspNetCore.Mvc.Controller,则可以从User属性获取IClaimsPrincipal并获取用户的实际“ID”,

using System.Security.Claims;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity;

ClaimsPrincipal currentUser = this.User;
var currentUserID = currentUser.FindFirst(ClaimTypes.NameIdentifier).Value;

您也可以从数据库的User实体中获取所有字段的数据(包括Id):
1.DI用户管理器

private readonly UserManager<ApplicationUser> _userManager;

    public HomeController(UserManager<ApplicationUser> userManager)
    {
        _userManager = userManager;
    }

2.像下面这样使用:

var id = userManager.GetUserId(User); // get user Id
var user = await userManager.GetUserAsync(User); // get user's all data
pbpqsu0x

pbpqsu0x2#

您需要首先在索赔中保存用户数据,然后获取授权用户数据。
添加声明

var identity = new ClaimsIdentity(OAuthDefaults.AuthenticationType);
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()));

获取索赔

var userId = (HttpContext.Current.User.Identity as ClaimsIdentity).Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier)
wyyhbhjk

wyyhbhjk3#

查看中的当前应用程序用户名:@用户,身份?.名称
用户名:密码:@环境.用户名

相关问题