質問

こんにちは、私は、カスタムの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);
}

私は何かが足りないのですか?

役に立ちましたか?

解決

FormsAuthentication.SetAuthCookie(tbUsername.Text, true);
bool x = User.Identity.IsAuthenticated; //true
string y = User.Identity.Name; //""
あなたは持っている問題は、この時点であなたが唯一の認証Cookieを設定しているされ、

、新しい要求があるまで、フォーム認証モジュールの内部で作成されるIPrincipalは発生しません - ので、その時点でHttpContext.Userはです奇妙な状態。それはあなたのページに到達し、正しいユーザーオブジェクトが作成される前にクッキーが読み込まれますブラウザから。

新しい要求だからリダイレクトは、その後、起きたら 要求が完了した後、

クッキーはブラウザのみで設定されます。

はさておきRedirectFromLoginPageがとにかくフォーム認証Cookieを作成しますと、あなたはそれを手動で行う必要はありません。

他のヒント

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

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

VSコミュニティ2015バージョンでは、Webフォームアプリケーションを作成する場合、それは自動的をFormsAuthenticationを削除するためにweb.configファイルノードでのコードを追加し、

セクションの下に削除してみてください
<modules>
  <remove name="FormsAuthentication"/>
</modules>

は、既に提案FormsAuthentication.RedirectFromLoginPage()方法として、自動的に認証クッキーを設定します。

しかし私の場合、私は(それは親アプリケーションからのHttpModulesを継承しないように)私は<httpModules>ファイルに子アプリケーションにweb.configタグをクリアしていたWebアプリケーションを入れ子になっていました。不要な親のHttpModulesを削除すると、すべてが再び働く作っています。

物事を複雑にする前に、このタグをチェックして、より良い:)

あなたはメンバーシッププロバイダーからユーザーの名前を探しているなら、このような何かをしようと...

var user = Membership.GetUser( HttpContext.Current.User.Identity.Name );
あなたはURL書き換えを使用したり、URLを変更している場合は、

、それはvalue.Youが.aspxのために.htmlをまたはなしextendtionからあなたのURLの変更パスを試してみてください原因復帰空nullの場合もあります。私case.You try.Iは、

これは便利願っていますため、これは問題です
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top