Membership.GetUser()を使用せずにASP.NETメンバーシップのUserIdにアクセスするにはどうすればよいですか?
-
02-07-2019 - |
質問
ASP.NET WebアプリケーションプロジェクトでUserId
を使用せずに、ASP.NETメンバーシップのMembership.GetUser(username)
にアクセスするにはどうすればよいですか?
Profile
をUserName
(System.Web.Profile.ProfileBase
)の隣の<=>名前空間に含めることができますか?
解決 3
私は自分でユーザーの認証を書くことにしました(非常に簡単ですが、うまくいきます)。
私の最初の質問はUserIdについてであり、次からは入手できません。
System.Web.HttpContext.Current.User.Identity.Name
他のヒント
これを試してください:
MembershipUser CurrentUser = Membership.GetUser(User.Identity.Name);
Response.Write("CurrentUser ID :: " + CurrentUser.ProviderUserKey);
これがUserIdを必要とするたびにデータベース呼び出しを保存する理由は何ですか?その場合、ASP.NET MembershipProviderを使用しているときは、通常、その呼び出しをキャッシュできるカスタムプロバイダーを実行するか、キャッシュできるユーティリティメソッドを実行します。
プロファイルに入れることを考えている場合、特にデータベース呼び出しが必要になるため、そこにカスタムプロファイルプロバイダーを使用しない限り、そうする理由はあまりありません。 UserIdを解析する処理を追加しました。
なぜGetUserIdメソッドを実装しなかったのか疑問に思っているのは、単にそのユーザーIDが含まれているプロバイダーのようにGUIDであることが常に保証されているわけではないからです。
編集:
ScottGuのプロバイダーに関する記事をご覧ください。 実際のソースコードのダウンロードへのリンクたとえば、SqlMembershipProvider 。
しかし、実際に行う最も簡単なことは、ユーザーオブジェクトまたはユーティリティクラスのGetUserId()メソッドです。ここでは、キャッシュ/セッションがある場合はキャッシュからセッションIDを取得します。セッション)、そしてそれを返します。
さらに考慮すべきこと(ただし、Cookieのサイズ制限があるため非常に注意してください):フォーム認証:プロバイダーもセッションもなしのメンバーシップ、ロール、プロファイル
次を試してください:
Membership.GetUser().ProviderUserKey
public string GetUserID()
{
MembershipUser _User;
string _UserId = "";
_User = Membership.GetUser();
Guid UserId = (Guid)_User.ProviderUserKey;
return _UserId = UserId.ToString();
}
ここには2つのオプションがあります:
1)ユーザーデータテーブルのプライマリキーとしてユーザー名を使用する すなわち:
select * from [dbo.User] where Username = 'andrew.myhre'
2)プロファイルにUserIDを追加します。
それぞれの方法には長所と短所があります。個人的には、最初の方が好きです。これは、すぐに使えるプロファイルプロバイダーを設定する必要がないことを意味し、とにかくシステムで一意のユーザー名を適用することを好みます。
Andrew:デフォルトで示したようなクエリを実行する場合は注意が必要です。これに一致するインデックスはないため、全テーブルスキャンのリスクがあります。さらに、ユーザーデータベースを複数のアプリケーションに使用している場合、アプリケーションIDは含まれていません。
最も近いインデックスはaspnet_Users_Indexで、ApplicationIdとLoweredUserNameが必要です。
編集:
エラー-Andrewの投稿を読み直し、aspnet_Usersテーブルでselect *を実行せず、ユーザー名を主キーとして使用するカスタムプロファイル/ユーザーテーブルを実行しています。
この問題が発生しました。解決策はweb.config構成にあります。これらを使用してweb.configを構成してみてください。
<roleManager
enabled="true"
cacheRolesInCookie="true"
defaultProvider="QuickStartRoleManagerSqlProvider"
cookieName=".ASPXROLES"
cookiePath="/"
cookieTimeout="30"
cookieRequireSSL="false"
cookieSlidingExpiration="true"
createPersistentCookie="false"
cookieProtection="All">
<providers>
<add name="QuickStartRoleManagerSqlProvider"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="ASPNETDB"
applicationName="SecurityQuickStart"/>
</providers>
</roleManager>
{
MembershipUser m = Membership.GetUser();
Response.Write("ID: " + m.ProviderUserKey.ToString());
}
aspnet_Membershipテーブルから現在のユーザーのUserID(uniqueidentifier)を取得します-現在が正常にログインしている場合。<!> lt;%=%<!> gt;または、認証が成功する前にその値を割り当てると、エラー<!> quot;オブジェクト参照がオブジェクト<!> quot;のインスタンスに設定されていません。
http://www.tek-tips .com / viewthread.cfm?qid = 1169200 <!> amp; page = 1
System.Web.HttpContext.Current.User.Identity.Name
を使用してみましたか? (User
とIdentity
が最初にnullでないことを確認してください。)