在ASP.NET Identity 2.0中获取当前用户ID


81

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

现在,我能确定的是使用manager.FindByEmailAsync(User.Identity.Name)哪些表引用了用户表中的用户名字段。在我的应用程序中,此设置与电子邮件字段相同。

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


您是如何获得UserId的,请告诉我,我遇到了同样的问题。
Ammar Khan 2014年

Answers:


108

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



2
这似乎是不能与Identity 2.任何建议,请工作
阿马尔·汗

2
应该仍然在那里。我现在在我的Identity 2项目中使用GetUserId()。
Anthony Chu

4
在Identity 3.0中,这看起来已经移到System.Security.Principal命名空间。
2015年

有什么方法可以获取当前用户角色?我什么时候应该设定角色?注意:我使用的是自定义存储提供程序..
Jeeva Jsb 2015年

61

为了在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)。


1
您能告诉我在哪里可以找到Microsoft.AspNet.Identity命名空间的相应DLL吗?
Franziee 2015年

14

万一您和我一样,并且用户实体的ID字段是Int或字符串以外的其他内容,

using Microsoft.AspNet.Identity;

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

会成功的


4

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

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

我希望这对某人有用。


1
您救了我的命
Sam Tubb
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.