您好,我使用自定义 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 处于奇怪的状态。一旦发生重定向,因为这是来自浏览器的新请求,所以在到达您的页面并创建正确的用户对象之前,将读取 cookie。
Cookie 仅在请求完成后才会在浏览器上设置。
顺便说一句,RedirectFromLoginPage 无论如何都会创建一个表单身份验证 cookie,您不需要手动执行此操作
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)