【发布时间】:2011-07-26 19:19:47
【问题描述】:
我想在会员 api 中使用电子邮件地址作为用户名,而不是接受用户名。 我希望用户可以使用电子邮件地址注册我的网站,并且他可以使用电子邮件 ID 和密码而不是用户名和密码登录。
【问题讨论】:
标签: .net asp.net asp.net-membership
我想在会员 api 中使用电子邮件地址作为用户名,而不是接受用户名。 我希望用户可以使用电子邮件地址注册我的网站,并且他可以使用电子邮件 ID 和密码而不是用户名和密码登录。
【问题讨论】:
标签: .net asp.net asp.net-membership
这就是我们所做的,所以它可以重复使用,我们可以在 web.config 中注册它。如果您考虑一下,这就是重要的地方。只要您的验证和前端向最终用户表明他们的用户名应该是电子邮件,并且您进行适当的验证...从那里正常调用任何支持您的会员提供商。快捷版本的新方法,以及隐藏/更改外观背后的原始版本。
public class EmailAsUsernameMembershipProvider : SqlMembershipProvider
{
public MembershipUser CreateUser(string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
{
return base.CreateUser(email, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, out status);
}
private new MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
{
return base.CreateUser(email, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, out status);
}
public override bool RequiresUniqueEmail
{
get
{
return true;
}
}
}
【讨论】:
这一切都是可能的,正如该线程中所述,但有一点需要注意:在数据库中,用户名的长度为 50 个字符(用户表),而电子邮件(成员资格表)的长度为 256 个字符。事实上,这意味着更短的电子邮件地址。 :)
【讨论】:
只需强制用户名 = 用户电子邮件。
为此,只需在用户创建表单上放置一个 RegEx 验证器,以仅允许正确的电子邮件作为用户名。
根据用户的电子邮件重命名已经存在的用户名。
【讨论】: