17

ASP.NET Web アプリケーション プロジェクトでUserId使用せずに ASP.NET メンバーシップにアクセスするにはどうすればよいですか?Membership.GetUser(username)

( )の隣UserIdの名前空間に含めることができますか?ProfileUserNameSystem.Web.Profile.ProfileBase

4

10 に答える 10

13

UserIdが必要になるたびにデータベース呼び出しを保存する理由はありますか?その場合、ASP.NET MembershipProviderを使用しているときは、通常、その呼び出しをキャッシュできるカスタムプロバイダーか、キャッシュできるユーティリティメソッドのいずれかを実行します。

プロファイルに配置することを検討している場合、特にデータベース呼び出しが必要であり、そこでカスタムプロファイルプロバイダーを使用していない限り、追加の処理が行われるため、そうする理由はあまりわかりません。 UserIdを解析します。

なぜ彼らがGetUserIdメソッドを実装しなかったのか疑問に思っているのなら、それは単に、含まれているプロバイダーのように、そのユーザーIDがGUIDになることが常に保証されているわけではないからです。

編集:

SqlMembershipProviderなどの実際のソースコードをダウンロードするためのリンクを提供するプロバイダーに関するScottGuの記事を参照してください。

しかし、実際に行う最も簡単なことは、ユーザーオブジェクトまたはユーティリティクラスのGetUserId()メソッドです。このメソッドでは、キャッシュ/セッションからUserIdを取得します。それ以外の場合は、データベースにアクセスし、ユーザー名でキャッシュします(またはセッションに保存します)。そしてそれを返します。

さらに考慮すべき点について(ただし、Cookieのサイズ制限があるため、十分に注意してください):フォーム認証:プロバイダーおよびセッションのないメンバーシップ、ロール、およびプロファイル

于 2008-09-29T05:50:53.840 に答える
4

ユーザーの認証を独自に作成することにしました (非常に単純ですが機能します)。これはずっと前に行う必要がありました。

私の最初の質問は UserId に関するもので、以下からは入手できません。

System.Web.HttpContext.Current.User.Identity.Name
于 2008-10-02T08:10:21.577 に答える
1
public string GetUserID()
            {
                MembershipUser _User;
                string _UserId = "";
                _User = Membership.GetUser();
                Guid UserId = (Guid)_User.ProviderUserKey;
                return _UserId = UserId.ToString();
            }
于 2014-11-21T21:38:50.463 に答える
0

ここには2つのオプションがあります。

1)ユーザーデータテーブルの主キーとしてユーザー名を使用します。

select * from [dbo.User] where Username = 'andrew.myhre'

2)プロファイルにUserIDを追加します。

それぞれの方法には長所と短所があります。個人的には、最初の方が好きです。これは、すぐに使用できるプロファイルプロバイダーを設定する必要がないことを意味し、とにかくシステムに一意のユーザー名を適用することを好みます。

于 2008-09-29T09:04:46.947 に答える
0

私はこの問題を抱えていました、解決策は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>
于 2011-07-13T09:49:18.713 に答える
0

アンドリュー: デフォルトでは、あなたが示したようなクエリを実行することに注意してください。それに一致するインデックスがないため、テーブル全体をスキャンするリスクがあります。さらに、ユーザー データベースを複数のアプリケーションに使用している場合は、アプリケーション ID が含まれていません。

最も近いインデックスは、ApplicationId と LoweredUserName を必要とする aspnet_Users_Index です。

編集:

おっと-アンドリューの投稿を読み直してください。彼は aspnet_Users テーブルで select * を行っていませんが、ユーザー名を主キーとして使用するカスタム プロファイル/ユーザー テーブルを作成しています。

于 2008-09-30T17:49:15.603 に答える
0

使ってみましたSystem.Web.HttpContext.Current.User.Identity.Nameか?User(最初にandIdentityが null でないことを確認してください。)

于 2008-09-30T18:17:05.753 に答える
0
{
MembershipUser m = Membership.GetUser();
Response.Write("ID: " + m.ProviderUserKey.ToString());
}

aspnet_Membership テーブルから現在のユーザーの UserID (uniqueidentifier) を取得します - 現在のユーザーがログインに成功した場合。認証が成功する前に <%= %> またはその値を割り当てようとすると、「オブジェクト参照オブジェクトのインスタンスに設定されていません」。

http://www.tek-tips.com/viewthread.cfm?qid=1169200&page=1

于 2008-12-07T03:29:55.117 に答える