質問:フォーム認証を使用して現在のユーザーID(名前ではない)を取得していますか?
私はフォーム認証と自分のカスタムメンバーシッププロバイダーで遊んでいます。
System.Web.Security.FormsIdentity veryFunny= (System.Web.Security.FormsIdentity)
System.Web.HttpContext.Current.User.Identity;
をそして私はこれやって、現在のメンバーシップのユーザーを取得することができます:私が見たものから、
、私は実行して、現在のFormsIdentityを取得することができます
var UserFromDb = System.Web.Security.Membership.GetUser();
そして、私は、ユーザーIDを取得することができますが私はおかしい見つける何
var MyUserId = UserFromDb.ProviderUserKey;
は)私がMembership.GetUser(呼び出すときということです、それは:これを行うことにより、メンバーシッププロバイダでこのメソッドを呼び出します。
public override MembershipUser GetUser(string username, bool userIsOnline)
データベース内のユーザー情報を検索します。私は考え出しだから何
は、.NETフレームワークは、内部でUSERNAMEに基づいて、データベースからユーザー情報を取得します
GetUser(System.Web.HttpContext.Current.User.Identity.Name, whatever);
をするということです。 私は、ユーザーIDを取得するだけで全ユーザーを検索しなければならないときにパフォーマンスが悪いため、まずこのことを気にしません。
第2に、それは私が期待していたものではないので、私はユーザーIDを全く検索しなければならないことに気をつけています。
第三に、プログラムの途中でユーザー名を変更することができないため、ユーザーがログアウトしてログインする必要があるため、気になるのです。
私にとって、このデザインはナンセンスのように聞こえます。
しかし、やはりマイクロソフトではアプリケーション名、グループ名、およびユーザー名をプライマリキーとして使用していますが、実際にはあまり意味がありません。
ここで私の質問:
DBルックアップなしでユーザーIDを取得する方法はありませんか?
メンバーシッププロバイダーのアイデア全体が設計によって壊れていますか?
壊れている場合:
私は、FormsIdentityにuserdataという文字列プロパティがあることがわかりました。 その場合、ASP.NETを使用してそこにユーザーIDを保存するにはどうすればよいですか?
ASP.NETメンバーシッププロバイダへようこそ。これらのプロバイダで高品質のデザインの例を探していると、うんざりするかもしれません。 –