获取ASP中的当前用户id.NET Identity 2.0

本文关键字:NET id Identity 用户 ASP 获取 | 更新日期: 2023-09-27 17:53:03

我刚刚切换到使用新的2.0版本的身份框架。在1.0中,我可以通过使用manager.FindByIdAsync(User.Identity.GetUserId())获得一个用户对象。GetUserId()方法在2.0中似乎不存在。

现在我所能想到的是使用manager.FindByEmailAsync(User.Identity.Name)引用用户表中的用户名字段。在我的应用程序中,这被设置为与电子邮件字段相同。

我可以看到,当有人需要更新他们的电子邮件时,这会导致问题。是否有一种方法来获得当前登录的用户对象基于一个不变的值(如id字段)在身份2.0框架?

获取ASP中的当前用户id.NET Identity 2.0

GetUserId()IIdentity的扩展方法,在Microsoft.AspNet.Identity.IdentityExtensions中。确保您已经使用using Microsoft.AspNet.Identity;添加了名称空间。

为了在Asp.net Identity 2.0中获得CurrentUserId,首先导入Microsoft.AspNet.Identity:

c#

:

using Microsoft.AspNet.Identity;

VB。NET:

Imports Microsoft.AspNet.Identity


然后在任意位置调用User.Identity.GetUserId():

strCurrentUserId = User.Identity.GetUserId()

此方法返回当前用户id作为数据库中用户id的定义数据类型(默认为String)。

如果你像我一样,用户实体的Id字段是Int或其他不是字符串的东西,

using Microsoft.AspNet.Identity;
int userId = User.Identity.GetUserId<int>();

可以

我也有同样的问题。我目前使用的是Asp.net Core 2.2。我用下面这段代码解决了这个问题。

using Microsoft.AspNetCore.Identity;
var user = await _userManager.FindByEmailAsync(User.Identity.Name);

我使用Claims来获取登录用户的userId、username和email。

            var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); // will give the user's userId
        //userName = User.FindFirstValue(ClaimTypes.Name); // will give the user's userName
        //email = User.FindFirstValue(ClaimTypes.Email);