0

既存のデータベーステーブルにユーザーが既に保存されているWebアプリのカスタムメンバーシッププロバイダーを作成しています。チュートリアルのコードを使用してプロバイダーをすぐに開始できましたが、実際のログインプロセスをどのように操作できるかについて少し迷っています。

私のカスタムプロバイダーにはValidateUser()のオーバーライドメソッドがあり、現時点ではtrueを返しています。しかし、セッションスコープに格納する現在のユーザーオブジェクトを作成したいと思います。このオブジェクトは、ユーザーに関するいくつかの詳細を格納するだけです。

別のオプションはASP.Netプロファイルプロバイダーを使用することだと思いますが、ログインプロセスにフックして、このユーザーオブジェクトを作成するか、現在のユーザーのプロファイル情報を入力するコードを実行する場所がわかりません。

4

2 に答える 2

0

「関心の分離」の原則を使用して、メンバーシッププロバイダーはセッションにユーザー情報を保存しないでください。

于 2010-03-16T03:58:31.450 に答える
0

Johnが言ったように、プロバイダーコードにユーザー情報をSessionに格納させないでください。代わりに、ログインコントロールを使用できます(ここに詳細があります)。すべてが正しく構成されている場合はプロバイダーを使用し、ログインが成功した場合(この場合はtrueを返しているためです) )プロバイダーのGetUserメソッドを呼び出すことにより、OnLoggedInイベントハンドラーでユーザーを取得し、Sessionに返されたMembershipUserを保存できます。

コードは次のようになります。

protected void LoginCtrl_LoggedIn(object sender, EventArgs e)
{
    var user = Membership.GetUser(LoginCtrl.UserName, true);
    Session["CurrentUser"] = user;
}
于 2010-03-16T04:12:20.677 に答える