【问题标题】:Does the UserName field have to be unique to work properly with ASP.NET MVC's SimpleMembership?UserName 字段是否必须是唯一的才能与 ASP.NET MVC Simple Membership 一起正常工作?
【发布时间】:2013-01-22 04:38:42
【问题描述】:

我正在使用 ASP.NET MVC 4 和带有 Code First 迁移的实体框架制作应用程序。
在名为InitializeSimpleMembership 的类中,有以下代码行:

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", 
    "UserId",   "UserName", autoCreateTables: true);

其中"UserName" 指的是包含用户用户名的列。这些用户名必须是唯一的吗?我仅在此应用程序中通过 Facebook 使用 OAuth 身份验证。因此,在 UserName 字段中,我存储了用户的 Facebook 名称(例如“George Smith”)。显然,可能有很多 George Smiths 使用我的应用程序,这会导致任何冲突吗?

我注意到WebSecurity类的很多方法,比如WebSecurity.GetUserId,都带有如下参数:string userName。如果用户名 不是 唯一的,那么我不确定这将如何工作。此外,OAuth 的默认 FacebookClient 会返回一个 ExtraData 字典,其中包含例如ExtraData["username"] = george.smith@gmail.com。似乎他们想将电子邮件存储在 UserName 下(以便 UserNames 是唯一的)。

我对 SimpleMembership 的了解不是很透彻。有人可以为我澄清一下存储在 UserName 下的值是否应该是唯一的,以便一切顺利运行?

谢谢。

【问题讨论】:

  • 这很有用,谢谢。他(或者更确切地说是 Matthew Osborn)提到“所有 SimpleMembership 要求是您的用户表上有两列,以便我们可以连接到它——一个“ID”列和一个“用户名”列。”太棒了,我明白这一点,但仍然没有关于“用户名”列是否需要唯一的信息。
  • 所有功能都应该是唯一的才能正常工作,据我所知,每个人都设计schema,其中username 列将是unique。可能是这里的专家会更技术地回答你。
  • 我想我会让用户名列唯一,以避免将来可能出现的并发症。但是,我找到了SQL Table definition for SimpleMembership in .NET 4.5,并且[UserName] 没有标记为唯一。

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


【解决方案1】:

据我查看他的代码发现,用户名必须是唯一的。最后还是很合理的:考虑一个允许非唯一用户名的登录系统,系统将如何区分用户?您不能依赖不同的密码,因为当用户名相同时,这将是唯一的区别。 如果您想在页面上显示另一个名称而不是“真实”(唯一)用户名,例如某种额外的昵称或屏幕名称,您应该创建一个 CustomMembershipProvider 并使用您自己的用户表。这样您就可以自定义所有内容以满足您的要求。这将允许数百个“Bob”每个都有一个唯一的用户名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多