我刚刚切换到使用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字段)来获取当前登录的用户对象?
答案 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);
我希望这对某人有用。