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