Jos*_*sef 4 sql asp.net asp.net-mvc-4 visual-studio-2012 simplemembership
我想在这里做两件事:
1.将电子邮件字段添加到(默认)UserProfile表.奇迹般有效.用户可以注册用户名和电子邮件.
2.更改登录以使用电子邮件而不是用户名,这也像魅力一样.
这是问题所在.以上只有在我单独使用时才有效,只要我使用它们两者,注册过程就会失败,并显示以下错误消息:
Cannot insert the value NULL into column 'UserName', table 'opdb.dbo.UserProfile'; column does not allow nulls. INSERT fails.
WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new { Email = model.Email
});
WebSecurity.Login(model.Email, model.Password);
Run Code Online (Sandbox Code Playgroud)
我或多或少遵循此处的 指南, 在评论部分中我看到其他人遇到相同的问题,但是,解决方案不是将UserName字段设置为允许空白,如回复中所述.
奇怪的是,只要我不同时使用它们,一切都会有效.有任何想法吗?这让我抓狂!
提前致谢
编辑:它可能是数据库中列的顺序吗?用于识别的字段需要是表格中的第一列吗?那么,如果我想要电子邮件作为身份,需要成为表格中的第一列?
它不是列顺序.我认为你还没有WebSecurity.InitializeDatabaseConnection正确设置.这听起来像是在添加电子邮件字段时,它被视为电子邮件字段(而不是用户的自然键),当您更改登录以使用电子邮件时,您实际上是将电子邮件插入UserName列?
无论哪种方式,工作都很简单.假设您已在数据库中拥有电子邮件列,并且您使用的是标准Internet应用程序模板,请执行以下操作:
UserProfile模型以添加Email属性,RegisterModel对Login模板执行相同操作并将模型更改UserName为EmailInitializeSimpleMembershipAttribute使用电子邮件而不是UserName用户的自然键AccountController Login和Register操作,以便在注册时捕获UserName和Email,并在登录时使用电子邮件所以,实际的变化是:
class UserProfile:添加属性 public string Email { get; set; } class LoginModel:将属性名称从更改UserName为Emailclass RegisterModel:添加属性public string Email { get; set; }并将其属性设置为Required,设置Display(Name等.(如果您想强制执行该操作,则为最大长度AccountController 变化
Login 方法:
model.UserName至model.Email该行if (ModelState.IsValid && WebSecurity.Login(model.UserName ...Register 方法:
WebSecurity.CreateUserAndAccount(model.UserName, model.Password);到WebSecurity.CreateUserAndAccount(model.Email, model.Password, new { UserName = model.UserName });WebSecurity.Login(model.UserName, model.Password);到WebSecurity.Login(model.Email, model.Password);"UserName"到"Email"在WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);m.UserName来m.Email<li>部分并将重复项更改 m.UserName为m.Email在一个vanilla Internet Application MVC 4项目中,这些更改将完美运行(在真正的vanilla项目中,如果要使用这些更改并且不编辑数据库以添加"电子邮件"列,则可能必须应用迁移).
| 归档时间: |
|
| 查看次数: |
3723 次 |
| 最近记录: |