HttpContext.Current.User.Identity.Name始终是string.Empty

Shi*_*mmy 26 asp.net httpcontext iidentity custom-membershipprovider

嗨,我使用自定义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);
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

blo*_*art 34

FormsAuthentication.SetAuthCookie(tbUsername.Text, true);
bool x = User.Identity.IsAuthenticated; //true
string y = User.Identity.Name; //""
Run Code Online (Sandbox Code Playgroud)

您遇到的问题是此时您只设置了身份验证cookie,在表单身份验证模块中创建的IPrincipal将不会发生,直到有新请求 - 所以此时HttpContext.User处于一个奇怪的状态.一旦重定向发生,那么因为它是来自浏览器的新请求,所以在您到达页面并创建正确的用户对象之前将读取cookie.

Cookie仅在请求完成后在浏览器上设置.

另外,RedirectFromLoginPage无论如何都会创建表单身份验证cookie,您无需手动执行此操作


小智 23

请尝试 System.Web.HttpContext.Current.Request.LogonUserIdentity.Name而不是User.Identity.Name.它对我有用.

  • 这是不同的。当我在我的网站上读到这个值时,我得到了我的 Windows 帐户 (AD) ... (2认同)

Pha*_*rus 8

值的HttpContext.Current.User.Identity.Name设置是通过调用来设置的RedirectFromLoginPage.HttpContext.Current.User.Identity.Name一旦重定向到新页面,您就可以获得当前用户ID .我不确定为什么你需要在这个上下文中通过User属性访问用户名,你不能只使用tbUsername.Text中包含的值吗?