UserName字段必须是唯一的才能与ASP.NET MVC的SimpleMembership一起正常工作吗?

时间:2013-01-22 04:38:43

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

我正在使用ASP.NET MVC 4和Entity Framework与Code First迁移制作应用程序 在名为InitializeSimpleMembership的类中,有以下代码行:

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

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

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

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

谢谢。

1 个答案:

答案 0 :(得分:0)

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