2012-01-05 8 views
0

私はMVCウェブアプリを開発しました。今、カスタムフォーム認証を使用したいと思います。 簡単にするために、私は登録用のSQLメンバーシッププロバイダを使用しています。しかし、私は単純なモジュールを作成する必要があるので、私は今でAspnet_regsqlツールカスタムフォーム認証MVC?

を使用してSQLメンバシップのテーブルを生成している私は、デフォルトのテーブル

に固執する必要があることに、他のカスタム・テーブルとマップ・メンバーシップ・テーブルを作成したくありませんRegisterModelクラスにAccountModel.cs私のような2つのフィールドを追加しました:

public class RegisterModel 
{ 
    [Required] 
    [Display(Name = "User name")] 
    public string UserName { get; set; } 

    [Required] 
    [Display(Name = "First name")] 
    public string FirstName { get; set; } 

    [Required] 
    [Display(Name = "Last name")] 
    public string LastName { get; set; } 
} 

はまた、姓と名の

今内部コントローラをdbo.aspnet_Membershipテーブルを更新し、さらに2つのフィールドを追加しましたAccountController.csで コード:ここで

[HttpPost] 
public ActionResult Register(RegisterModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     // Attempt to register the user 
     MembershipCreateStatus createStatus; 
     Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus); 
    } 
} 

でCreateUserは、会員のデフォルト方法であるように、私は、ユーザーを作成するときにテーブルに私のカスタムフィールド(姓と名)を挿入することはできませんよ?

どうすればいいですか?

+0

アッシュは、コードマーカを乱用しないでください。あなたのコードのためだけにそれらを使用してください。それは、 –

答えて

1

あなたの要件を読んだ後、私はあなたがデフォルトに固執するのではなく、自分でカスタムプロバイダをコーディングする必要があると感じています。私がこれを言う理由は、あなたが必要とする唯一の選択肢は@Mystere Manの解決策に従うことだけです。

アプリでUsersテーブルを作成し、その主キーをGUIDにしてカスタムフィールドを追加します。ユーザーを作成するときは、新しいレコードをユーザーテーブルに挿入し、CreateUserから返されたMembershipUserのProviderUserKeyを使用します。これは非常にシンプルで、メンバーシップシステムを煩わせる必要はありません。

メンバーシッププロバイダーでプレーする場合は、まったく新しいプロバイダーを自分で作成しないでください。人々がそう思うほど難しいことではありません。それに応じて抽象クラスを実装するだけです。

カスタムメンバーシッププロバイダを最初から構築するためのチュートリアルがオンラインで入手できます。

+0

ありがとうございました – Neo

2

メンバーシップテーブルを拡張しないでください。ただしないでください。しないでください。本気で言っているんだ。それをしないでください。本当に。私は真剣です。それをしないでください。

代わりに、アプリケーションでUsersテーブルを作成し、それを主キーとしGUIDにしてカスタムフィールドを追加します。ユーザーを作成するときは、新しいレコードをユーザーテーブルに挿入し、CreateUserから返されたMembershipUserのProviderUserKeyを使用します。これは非常にシンプルで、メンバーシップシステムを煩わせる必要はありません。

あなたはあなたがしたくないと言っていることは知っていますが、それはそれを行う唯一の良い方法です。

唯一の他の選択肢は、プロファイルプロバイダを使用してこの情報を保存することですが、他のものにマップすることはできません。プロファイルプロバイダーはかなり一般的で、ほとんどの人はそれが役に立たないと感じています。

メンバーシップテーブルを変更した場合、問題が発生します。また、独自のカスタムプロバイダを作成せずに、データを処理する良い方法はありません。

+0

あなたのソリューションのための任意のリンク 'あなたのアプリでユーザーテーブルを作成する..' 私は正しく従うことができますか? – Neo