2

我正在使用 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 下的值是否应该是唯一的,以便一切顺利运行?

谢谢你。

4

1 回答 1

0

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

于 2013-06-18T09:45:38.733 回答