ASP.NETメンバーシップシステムは、一意のユーザー名を使用してユーザーを識別します。電子メールでユーザーにログインする必要がある場合はどうなりますか?
ユーザー名のプロパティに電子メールを渡すこともできますが、少し面倒になります。ユーザーは電子メールアドレスを変更したい場合があります。
それを実装するための良い方法を説明する利用可能なリソースはありますか?
ASP.NETメンバーシップシステムは、一意のユーザー名を使用してユーザーを識別します。電子メールでユーザーにログインする必要がある場合はどうなりますか?
ユーザー名のプロパティに電子メールを渡すこともできますが、少し面倒になります。ユーザーは電子メールアドレスを変更したい場合があります。
それを実装するための良い方法を説明する利用可能なリソースはありますか?
ユーザー名として電子メールアドレスを使用するというあなたのアプローチは、私にとってうまく機能します。しかし、あなたは正しいです。メールアドレスが変更されると面倒になります。私たちが採用したアプローチは、ユーザーが自分のメールアドレスを変更したいときに、ユーザー名も変更するというものでした。これを行う唯一の方法は、データベースを直接操作することでした。ユーザーへの参照がUserIdを介して行われるように注意しました。これにより、ユーザー名の変更によって何も中断されないことが保証されました。
興味がある場合に備えて、使用したコードは次のとおりです。コードは、MembershipUserクラスをラップするような永続クラスにあり、1対1の関係として格納されます。邪悪な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();