加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – Simplemembership – 添加电子邮件字段并用作登录名

发布时间:2020-12-16 06:32:27 所属栏目:asp.Net 来源:网络整理
导读:我想在这里做两件事: 1.将电子邮件字段添加到(默认)UserProfile表. 奇迹般有效. 用户可以注册用户名和电子邮件. 2.更改登录以使用电子邮件而不是用户名,这也像魅力一样. 这是问题所在.以上只有在我单独使用时才有效,只要我使用它们两者,注册过程就会失败,并
我想在这里做两件事:

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);

我或多或少跟随着
guide found here,
在评论部分,我看到其他人遇到了同样的问题,但是,解决方案是不要将UserName字段设置为允许回复中所述的空值.

奇怪的是,只要我不同时使用它们,一切都会有效.有任何想法吗?这让我抓狂!

提前致谢

编辑:它可能是数据库中列的顺序吗?用于识别的字段需要是表格中的第一列吗?那么,如果我想要电子邮件作为身份,需要成为表格中的第一列?

解决方法

它不是列顺序.我认为您尚未正确设置WebSecurity.InitializeDatabaseConnection.这听起来像是在添加电子邮件字段时,它被视为电子邮件字段(而不是用户的自然键),当您更改登录以使用电子邮件时,您实际上是将电子邮件插入UserName列?

无论哪种方式,工作都很简单.假设您已在数据库中拥有电子邮件列,并且您使用的是标准Internet应用程序模板,请执行以下操作:

>更改您的UserProfile模型以添加Email属性,对RegisterModel执行相同操作并将Login Model从UserName更改为Email
>更新InitializeSimpleMembershipAttribute以使用Email而不是UserName作为用户的自然键
>更新AccountController登录和注册操作,以便在注册时捕获UserName和Email,并在登录时使用电子邮件
>更新视图

所以,实际的变化是:

> Models / AccountModels.cs更改

> class UserProfile:添加属性public string Email {get;组; }
> class LoginModel:将属性名称从UserName更改为Email
> class RegisterModel:添加属性public string Email {get;组;并将其属性设置为Required,设置Display(Name等)(如果你想强制执行,则设置最大长度)

> AccountController更改

>登录方式:

>将model.UserName更改为行中的model.Email if(ModelState.IsValid&& WebSecurity.Login(model.UserName …

>注册方法:

>更改WebSecurity.CreateUserAndAccount(model.UserName,model.Password);到WebSecurity.CreateUserAndAccount(model.Email,new {UserName = model.UserName});
>编辑 – 错过了一个变化:
更改WebSecurity.Login(model.UserName,model.Password);到WebSecurity.Login(model.Email,model.Password);

>过滤器/ InitializeSimpleMembershipAttribute.cs更改

>在WebSecurity.InitializeDatabaseConnection中将“UserName”更改为“Email”(“DefaultConnection”,“UserProfile”,“UserId”,“UserName”,autoCreateTables:true);

>意见/帐户/ Login.cshtml

>将m.UserName的三个用法更改为m.Email

>意见/帐户/ Register.cshtml

>复制并粘贴UserName< li>部分并将重复项m.UserName更改为m.Email

在一个vanilla Internet Application MVC 4项目中,这些更改将完美运行(在真正的vanilla项目中,如果要使用这些更改并且不编辑数据库以添加“电子邮件”列,则可能必须应用迁移).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读