【问题标题】:SimpleMembership Roles with no Username - is it possible?没有用户名的 SimpleMembership 角色 - 可能吗?
【发布时间】:2013-11-12 21:42:36
【问题描述】:

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

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

Roles.AddUserToRole(user.Username, role);

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

我能想到的一个混乱的选择是将每个用户的 Id 复制到 Username 字段中,以满足 SimpleMembershipProvider 的要求...尽管我宁愿以某种方式使用扩展方法来处理这个问题,如果它甚至是远程可取的并且可以做到的话所以...只是这样我就不必在我的用户表中添加一个虚假的列。

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

更新:

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

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

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

再次更新:我刚刚意识到我可以提取我的电子邮件字段并使用用户名列来存储唯一的电子邮件地址。我仍然有兴趣了解如何解决这个问题。

【问题讨论】:

  • @ShayanNafisi - 我的用户模型上没有用户名。只需通过电子邮件显示名称/身份验证
  • 你需要 userId。让它自动生成
  • @ShayanNafisi 我有一个自动生成的用户 ID :)
  • 所以应该这样做。那有什么问题呢?
  • @ShayanNafisi 问题是如果我可以避免的话,我不想在我的用户表上有一个额外的列。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这意味着每次创建用户时,我都会将其保存到数据库中,并将 id 复制到用户名,然后再次保存 - 这是唯一一次用户名是 set。对吗?
    • 基本上是的。虽然这是一种草率的方式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多