获取当前用户的ID ASP.NET Membership

14
你们是如何使用ASP.NET Membership Provider获取当前用户的ID的呢?我的应用程序是一个MVC 3,采用Database First方法,所以我创建了自己的数据库,并且Membership Provider和Role Provider正在使用我的表格(自定义Membership和Role Provider)。
在我的某个页面(反馈)中,用户可以发送关于我的网站的反馈,如果他已经连接,我希望在插入时将UserID包括在表格中。
但是由于ASP.NET Membership是一个IIdentity,我唯一能够访问的是名称。我不想通过名称创建两个表之间的链接,我需要ID!
那么你们在这个非常简单的任务中在应用程序中都做些什么呢?我的意思是,在几乎每个页面中,需要插入值的连接用户都需要用户ID来创建正确的外键到用户表格,对吧?顺便说一下,我对这个MVC框架很陌生,在那之前我使用ASP.NET aspx,并且对于用户信息,我使用了Session对象,它为我提供了当前ID、名称和其他必要的字段。由于使用Session对象的实现在共享主机中给我带来了麻烦,我想使用真正的membership。
谢谢!
编辑
我想要的ID必须是一个整数(实际上,我想要的是User表中的UserID字段)。

可以有很多“当前用户”,只需根据用户名执行SQL查询即可。 - Security Hound
你尝试过这个吗:(Guid)(Membership.GetUser().ProviderUserKey) - Tim Schmelter
@TimSchmelter:是的。但这会给出一个Guid。我的反馈表需要一个整数ID。 - Jean-François Côté
会员数据库保存了一个GUID或UNIQUEIDENTIFIER作为用户ID,你将不会得到一个整数。 - Kaf
然后您需要将整数与GUID进行映射。我之前曾经问过一个相关的问题:https://dev59.com/hFjUa4cB1Zd3GeqPUcZk - Tim Schmelter
6个回答

31

试一试这个;

MembershipUser mu = Membership.GetUser("username");
string userId = mu.ProviderUserKey.ToString();

对于当前已登录的用户,您可以在不传递用户名的情况下使用;

string userId = Membership.GetUser().ProviderUserKey.ToString();

4
可以的,如果需要,你可以将其转换为Guid类型。Guid userId = (Guid)(Membership.GetUser().ProviderUserKey) - Kaf
但我需要一个整数用户ID(用户表中的那个)。 - Jean-François Côté
2
会员系统有一个名为aspnet_Users的表,其中userId是一个Uniqueidentifier/Guid而不是int。 - Kaf
同意,MS Membership/Role提供程序数据库不使用类似整数的类型来表示ID。唯一的标识值是GUID/UniqueIdentifier。 - Frank Thomas
那我应该修改数据库,使用 GUID 而不是 int 类型,在我的反馈表和用户表之间建立外键关系? - Jean-François Côté
最重要的是,您必须保持两个用户表之间的1:1关系。除此之外的更改取决于受影响对象和数据的数量,您需要自行决定。 - Kaf

4
我想分享如何获取Identity 2.0的用户ID:
string UserId = System.Web.HttpContext.Current.User.Identity.GetUserId();

0

假设你在web.config中为你的提供者正确地配置了一切,而且既然你可以获取到用户名,我建议:

Dim muser As MembershipUser = Membership.GetUser(userName)

以下是MembershipUser对象的详细信息:http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28SYSTEM.WEB.SECURITY.MEMBERSHIPUSER%29;k%28TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29;k%28DevLang-VB%29&rd=true

除了名称之外,还有许多其他属性可用。您想要的ID字段称为“ProviderUserKey”


0

要获取当前用户ID,您可以尝试以下方法

string currentUserId= Convert.ToString(Membership.GetUser().ProviderUserKey);

0
我遇到了类似的问题。 我(也是出于其他原因)创建了一个基本控制器类,所有其他控制器都继承自该类。 您可以让基类保存用户信息以供随时使用。

0

这可能是你想要的吗?

asp.net会员身份验证中的用户ID?

个人而言,我有自己的类,它封装了通过用户名检索这些详细信息以及我在应用程序中需要的任何自定义数据。

敬礼


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接