2011-03-31 11 views
4

ユーザー名を受け入れる代わりに、メンバーシップAPIでユーザー名として電子メールアドレスを使用します。 私は電子メールアドレスを使用して自分のサイトにサインアップし、ユーザー名とパスワードの代わりに電子メールIDとパスワードを使用してログインできるようにしたいと考えています。ASP.NETでユーザー名として電子メールアドレスを設定するメンバーシッププロバイダ

答えて

4

強制的にユーザー名=ユーザーのメールを送信するだけです。

これを行うには、ユーザー作成フォームにRegExバリデーターを入れて、適切な電子メールのみをユーザー名として許可します。

ユーザーの電子メールに基づいて既存のユーザー名を変更します。

7

これは私たちが行ったことであり、再利用可能であり、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; 
     } 
    } 
} 
+0

私はDAL/BLLとWebアプリケーション(ビジネス・ロジック・レイヤーのデータベース・アクセス・レイヤーとWebアプリケーションの異なるレイヤーの組み合わせで、SQLプロバイダー・クラスを継承する方法はできません)のような構造を持っているWebアプリケーションを使用しています。だから... – user685565

+0

私たちのアプリは同じものを使用しています。これはasp.netのメンバーシップのものを使用する場合です。メンバーシップのものを使用したくない場合は、独自のメンバーシッププロバイダを作成する必要があります。私たちは、あなたのデータを照合するためにそのクエリをラップし、現在ログインしているユーザーに簡単にアクセスできるように、httpcontextに注入されたSecurityContextオブジェクトを持っています。あなたの質問でこの答えがそれをカバーしていない場合。 –

5

既にこのスレッドで説明したようにこれは可能なすべてのですが、注意すべき一つのことがあります:電子メール(テーブル・メンバーシップ)が256個の文字である一方で、データベースにユーザ名が50文字(表ユーザ)の長さであります長いです。実際、これは短い電子メールアドレスを意味します。 :)

関連する問題