2011-09-29 1 views
0

フォーム認証を使用してMVC 3プロジェクトを開始しました。私はWebプロジェクト(mvcプロジェクト)とデータプロジェクトを持っています。データプロジェクトは、すべてのデータベース対話を処理します。フォーム認証を使用するMVC 3では、データプロジェクトのベストプラクティスでuseridが必要ですか?

すべての挿入と更新時に、現在のユーザーIDをデータベースに格納する必要があります。

ここに私が今やっていることがあります。私はこれが共通のシナリオでなければならないと感じています。誰かがこれを行うための良い方法でいくつかの光を当てることができますか?

  1. ログインまたは登録すると、データベースから現在のユーザーレコード(ユーザー名別)を取得し、ユーザーIDをセッションに格納します。
  2. 私のデータプロジェクト内にレコードを保存するときは、httpcontext(存在する場合)を参照し、セッションに格納されているユーザーIDを使用します。

これは、1つを除いてすべてのシナリオで機能します。ユーザーに有効なCookieが保存されていると失敗し、ログイン/登録アクションをバイパスできます。これが起こると、わかりやすく、userIdのセッション変数がnullになります。私の次のステップは、セッション変数がnullかどうかを調べるためにベースコントローラーとimAnAuthorizeStartingを作成することです。これはkludgyを感じ、私はよりよい方法があることを望んでいる。

私は、Save呼び出しごとにユーザーIDをパラメータとしてデータプロジェクトに渡す必要はありません。

誰かがいくつかの輝きを持っていますか?ありがとう。

答えて

2

ユーザーIDは、メンバーシップ経由で利用できます。したがって、このような何か:ユーザーがフォーム認証Cookieに対して認証されたときに

Membership.GetUser(HttpContext.User.Current.UserName).ProviderUserKey 

IPrincipal(HttpContext.user.Current)が作成されます。必要に応じてメンバーシップからユーザーIDを取得するだけです。

毎回メンバーシップにアクセスしたくない場合は、いつでもユーザーIDセッションコールをラップするスタティックヘルパークラスを作成できます。それがnullの場合は、メンバーシップ・プロバイダに渡され、取得され、セッションに格納されます。後でアクセスすると、セッション変数が取得されます。

+0

美しい。ありがとうございました。素晴らしい仕事をした。私がMVC以外のプロジェクトからメンバーシップにアクセスできるかどうかはわかりませんでした。 – kmehta

+0

@kmehta - 正に、私はこのアプローチをお勧めしません。私はそれに対処するために依存性注入を使用します。ところで、フォーム認証とメンバーシップは、MVCではなくASP.NETの一部です。 MVCはただそれを使用します。 –

+0

データプロジェクトでSystem.Webを参照するのが少し汚いと感じましたが、このシナリオでのみ使用されます。呼び出しがWebプロジェクトから来ない場合は、そこにチェックインがあります。このために依存性注入を使う方法を簡単に説明できますか? – kmehta

関連する問題