27

こんにちは、私はカスタム MembershipProvider を使用しています。

アプリケーション シナリオで現在のユーザー名を知りたいのですが、HttpContext.Current.User.Identity.Name にアクセスしようとすると、常に string.Empty が返されます。

if (Membership.ValidateUser(tbUsername.Text, tbPassword.Text))
{
    FormsAuthentication.SetAuthCookie(tbUsername.Text, true);
    bool x = User.Identity.IsAuthenticated; //true
    string y = User.Identity.Name; //""
    FormsAuthentication.RedirectFromLoginPage(tbUsername.Text, cbRememberMe.Checked);
}

何か不足していますか?

4

7 に答える 7

35
FormsAuthentication.SetAuthCookie(tbUsername.Text, true);
bool x = User.Identity.IsAuthenticated; //true
string y = User.Identity.Name; //""

あなたが抱えている問題は、この時点で認証 Cookie のみを設定していることです。フォーム認証モジュール内で作成される IPrincipal は、新しい要求があるまで発生しません。その時点で、HttpContext.User は奇妙な状態になります。 . リダイレクトが発生すると、ブラウザからの新しいリクエストであるため、ページに到達して正しいユーザー オブジェクトが作成される前に Cookie が読み取られます。

Cookie は、リクエストが完了した後にのみブラウザに設定されます。

RedirectFromLoginPage はとにかくフォーム認証 Cookie を作成するので、手動で行う必要はありません。

于 2009-06-29T06:00:18.287 に答える
24

System.Web.HttpContext.Current.Request.LogonUserIdentity.Nameの代わりに試してください User.Identity.Name。それは私のために働いた。

于 2012-09-24T13:44:28.507 に答える
9

の値はHttpContext.Current.User.Identity.Name、の呼び出しによって設定されRedirectFromLoginPageます。HttpContext.Current.User.Identity.Name新しいページにリダイレクトされると、現在のユーザーIDを取得できます。このコンテキストでUserプロパティを介してユーザー名にアクセスする必要がある理由がわかりません。tbUsername.Textに含まれている値だけを使用できませんか?

于 2009-06-29T05:41:06.240 に答える
2

VS Community 2015 バージョンでは、Web フォーム アプリケーションを作成すると、web.config ノードにコードが自動的に追加されて FormsAuthentication が削除されます。以下のセクションを削除してみてください。

<modules>
  <remove name="FormsAuthentication"/>
</modules>
于 2016-03-31T00:02:01.520 に答える
1

すでに提案されているFormsAuthentication.RedirectFromLoginPage()方法として、認証 Cookie を自動的に設定します。

ただし、私の場合、ファイル<httpModules>内の子アプリケーションのタグをクリアしたネストされた Web アプリケーションがありました (そのため、親アプリケーションから httpModules を継承しません) web.config。不要な親 httpModules を削除すると、すべてが再び機能するようになりました。

物事を複雑にする前に、このタグを確認することをお勧めします:)

于 2014-02-17T09:52:34.523 に答える
0

メンバーシップ プロバイダーからユーザーの名前を探している場合は、次のようなものを試してください...

var user = Membership.GetUser( HttpContext.Current.User.Identity.Name );
于 2009-06-29T03:57:30.253 に答える
0

URL 書き換えを使用している場合や URL を変更している場合は、空の null 値が返される可能性があります。URL のパスを .html から .aspx に変更するか、拡張子なしに変更してみてください。これは私の場合の問題です。試してみてください。これが役立つことを願っています

于 2014-04-09T16:55:18.593 に答える