1

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

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

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

4

1 回答 1

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();
于 2009-07-07T08:07:09.140 回答