没有用户名的SimpleMembership角色 - 是否可能?

时间:2013-11-12 21:42:36

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 simplemembership

我的数据库中的用户具有非唯一的显示名称;唯一的唯一标识符是UserId。

通常,我会使用以下内容将用户添加到角色:

Roles.AddUserToRole(user.Username, role);

但是现在我没有用户名,所以我需要重新考虑与角色相关的所有工作。

我能想到的一个混乱选项是将每个用户的Id复制到用户名字段中以满足SimpleMembershipProvider ...虽然我甚至不知何故使用扩展方法来处理这个问题,如果它甚至可以远程建议并且可以做到所以...只是这样我就不必用伪造的栏子弄乱我的用户表了。

这里的任何帮助将不胜感激。

更新:

即使我将userId复制到username列以使SimpleMembership正常工作,我仍然需要用户名来创建用户:

  WebSecurity.CreateUserAndAccount(model.UserName, model.Password, etc)

除了滚动我自己的会员资格外,我不知道该怎么做。

再次更新:我刚刚意识到我可以选择我的电子邮件字段,只需使用“用户名”列存储唯一的电子邮件地址即可。我仍然有兴趣听听如何解决这个问题。

2 个答案:

答案 0 :(得分:2)

您需要一些独特的用户可以输入以在身份验证期间识别自己,无论是用户提供的用户名,电子邮件地址,PIN等等......让用户记住生成的号码作为唯一标识符UserProfile似乎不是一个好的用户体验。因此,如果您不想添加任何其他列,那么用于在用户登录过程中使用的唯一标识用户的任何内容都可以存储在用户名列中。从最新的更新到问题,看起来电子邮件地址用于识别用户,您可以将其存储在用户名列中而不会出现问题。

Adding columns to the UserProfile is easy要做,如果它提供更好的用户体验和安全性,我不会回避它。例如,如果要捕获要在网站上显示的显示名称或与用户进行的任何通信,您可以添加电子邮件列,并告诉SimpleMembership您要使用它来通过更改{{中的参数来标识用户3}}。您可以将参数 userNameColumn 更改为您的电子邮件列的名称。

答案 1 :(得分:1)

是的,要么使用ID作为用户名,要么电子邮件是唯一的用户名。 顺便说一下这种情况并不是一种混乱的方式。如果没有人会监督userId,我会使用id。