2012-01-27 14 views
1

私は時にこのメンバーシップシステム1の小さなステップを試してみて取り組むつもりです...MVC 3の基本的なカスタム会員

だから、それを言うてみましょう:

ステップ1を、私は、SQLデータベースを作成し、私はこのようになりますこと、非常に基本的なユーザーテーブルを持って、そのデータベースに:

Users 
UserID int, identity, primary key 
UserName nvarchar(25) 
UserPassword nvarchar (25) 
UserEmail nvarchar (75) 

は、ステップ2、私は

ステップ3新しいASP.NET MVC3 Webアプリケーションを作成し、私はインターネットアプリケーションtemplatを選択カミソリ・ビュー・エンジンを持つeとチェック使用HTML 5セマンティックマークアップ

ステップ4、私はエンティティデータモデルウィザードでは、ADO.NETエンティティデータモデル

ステップ5を追加し、私はデータベース

から生成することを選択します

ステップ6、私は私のデータ接続を選択し、エンティティ接続設定を保存するために選択するのWeb.Config

エンティティデータモデルウィザードステップ7、==>あなたのデータベースオブジェクトを選択して、私はテーブルにチェックを入れて、 「生成されたオブジェクト名を複数化または特異化する」および「モデルに外部キー列を含める」のデフォルトのチェックを残し、

ステップ10「...コード生成項目の追加」終了

ステップ8をクリックして、私はソリューション

ステップ9を構築し、私は右の.edmxファイルをクリックしてすることを選択し、私は新しいを追加します

[OK]をクリックします。ここでは、ユーザーアカウントテーブルを使用して組み込みのアカウント/メンバーシップシステムを使用する方法についてはわかりません。今のところ、この特定のプロジェクトのために、私はロールと何もない、権限[認証]機能は必要ありません...

これは、正確には逐語的なコンプライアンスですユーザーがWebサイトにアクセスして登録またはログインすると、アプリケーションが自分のUsersテーブルを使用するようになりますか?最終的には、ユーザーがログインすると、[authorize]デコレーションが自分のユーザーのために機能するようになります。


編集:おかげで...この作品を作るために、本当に...次の変更、追加をolivehourする

ステップ10後:(サイドノート:あなたのユーザーテーブルからのUserPasswordを削除し、あなた

ステップ11、aspnet_regsql.exeツールを実行してASP.NETのテーブルをデータベースに追加します。

ステップ12 Web.configファイルを開き、EntityFrameworkのconnectionStringから "データソース"情報だけをコピーし、 "ApplicationServices" connectionString "data source"を貼り付けて、EntityFrameworkのデータソースに置き換えます。

ステップ13、ソリューションエクスプローラで、コントローラディレクトリを右クリックし、コントローラを追加します。この時点で、あなたのUserControllerを追加してください。

ステップ14、AccountControllerの[HttpPost] Registerアクションメソッド内で、 "if(createStatus == MembershipCreateStatus。成功)」声明、次の行を追加します。

TheNameOfYourEntities db = new TheNameOfYourEntities(); 
User user = new TheNameOfYourProject.User(); 
user.UserName = model.UserName; 
user.UserEmail = model.Email; 
db.Users.Add(user); 
db.SaveChanges(); 

ステップ15、ソリューションのビルド、すべてを保存し、ファイル名を指定して実行

答えて

1

我々は我々のアプリケーションのユーザーテーブルとは別の組み込みのメンバーシッププロバイダーを保つ

Iユーザーの認証を処理するために組み込みのメンバーシッププロバイダを使用することをお勧めしますいくつかの決定が必要な設定があります(たとえば、ユーザー名とは何か、電子メールアドレスをユーザー名として許可しますか? requireUniqueEmailはweb.configのプロバイダ要素でtrueに設定します(ユーザーの電子メールアドレスをユーザー名にします)。

EFを使用して作成したカスタムUsersテーブルの場合、はログイン用にそれを使用しません。。これを使用して、ユーザーに関するアプリケーション固有の情報を格納します。ただし、テーブルの行にメンバーシップ・プロバイダのdbのユーザー名と同じ主キー値を指定します。

したがって、ユーザが電子メールアドレス[email protected]に登録した場合は、最初にMembership.CreateUserを入力してプロバイダdbに追加し、同じアクションで、主キーを持つusersテーブルに行を追加します。 [email protected]

この方法では、データベースにパスワードの暗号化値を保存する必要はありません。メンバーシップ・プロバイダに委託します。ユーザーがログインすると、FormsAuthenticationはログイン状態を維持するためのクッキーを作成します。コントローラーアクションでは、コードUser.Identity.Nameでユーザー名を取得できます。カスタムアプリケーション固有のユーザー表から行を選択するには、その値をパラメーターとして使用します。

+0

この考え方は、かつて私の考えを超えていましたが、私はそれがハックと見なされることを心配しましたが、それについてもっと考えると、他のやり方も同様にハック、私はそれを試してみましょう。 –

+0

これはハックではありません。imhoはappdbをメンバーシップ・プロバイダに接続するか、パスワードの暗号化を試みるよりもはるかにクリーンです。 SSOの世界では、サインインをプロバイダーに委託することが一般的になっています。そのような場合には、あなたのアプリケーションデータベースにパスワード情報を保存しないでください。 – danludwig

+0

olivehourありがとうございました。あなたのアドバイスで実装した解決策を上記で確認してください。 –

関連する問題