配置电子邮件作为登录的个人档案系统/会员系统

时间:2009-07-07 07:47:01

标签: asp.net asp.net-membership asp.net-profiles

ASP.NET Membershipsystem使用唯一的用户名来标识用户。如果我需要通过电子邮件登录用户该怎么办?

我可以将电子邮件传递给用户名的属性,但事情变得有些混乱。用户可能想要更改电子邮件地址。

是否有任何资源可用于描述实施它的好方法?

1 个答案:

答案 0 :(得分:2)

您使用电子邮件地址作为用户名的方法适合我。但你是对的;当电子邮件地址发生变化时,它确实变得混乱。我们采取的方法是当用户希望更改其电子邮件地址时,我们也会更改其用户名。唯一的方法是通过直接数据库操作。我们小心翼翼地确保通过UserId完成对用户的任何引用;这确保了用户名更改没有破坏任何内容。

以下是我们使用的代码,以防您感兴趣。代码在一个持久化类中,它包含MembershipUser类,并存储为一对一的关系。只需忽略邪恶的SQL字符串构建并做更好的事情;)

IDbCommand cmd = connection.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = string.Format(
    "UPDATE dbo.aspnet_Users SET UserName = '{0}', LoweredUserName = '{0}' WHERE UserId = '{1}'",
    DatabaseManager.SqlEscape(value.ToLower()), this.Id);
cmd.ExecuteNonQuery();

cmd = connection.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = string.Format(
    "UPDATE dbo.aspnet_Membership SET Email = '{0}', LoweredEmail = '{0}' WHERE UserId = '{1}'",
    DatabaseManager.SqlEscape(value.ToLower()), this.Id);
cmd.ExecuteNonQuery();