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

时间:2014-03-25 02:36:20

标签: c# asp.net asp.net-identity

我刚刚切换到使用Identity 2.0的新2.0版本。在1.0中,我可以使用manager.FindByIdAsync(User.Identity.GetUserId())获取用户对象。 GetUserId()方法似乎不存在于2.0中。

现在我可以想出的是使用manager.FindByEmailAsync(User.Identity.Name)引用users表中的用户名字段。在我的应用程序中,它设置为与电子邮件字段相同。

当有人需要更新他们的电子邮件时,我可以看到这会导致问题。有没有办法根据Identity 2.0 Framework中不变的值(例如id字段)来获取当前登录的用户对象?

4 个答案:

答案 0 :(得分:92)

GetUserId()IIdentity上的一种扩展方法,位于Microsoft.AspNet.Identity.IdentityExtensions。确保已使用using Microsoft.AspNet.Identity;添加名称空间。

答案 1 :(得分:51)

为了在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作为数据库中userid的定义数据类型(默认为String)。

答案 2 :(得分:12)

万一你和我一样,用户实体的Id字段是一个Int或其他字符串以外的东西,

using Microsoft.AspNet.Identity;

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

会做的伎俩

答案 3 :(得分:0)

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

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

我希望这对某人有用。