从登录页面重定向之前,User.Identity.IsAuthenticated为false。

6

我有一个登录页面,使用ASP.NET成员身份验证。一旦我验证了用户,我需要将一些关于他们的详细信息存储在Session变量中。问题是

Membership.GetUser() == null and 
User.Identity.IsAuthenticated == false 

直到我离开这个页面之前。 我尝试使用

FormsAuthentication.Authenticate(tbUsername.Text, tbPassword.Text);

我检查了User.Identity.IsAuthenticated,但它只有在我到达另一个页面之后才会返回false。 有什么建议吗?

3个回答

4

好的,FormsAuthentication.Authenticate() 返回一个 boolean 类型,所以您会知道认证是否成功。如果成功,您可以将用户的用户名传递给 Membership.GetUser() 并访问返回的 MembershipUser 对象,以获取您需要的任何数据并将其存储在会话中。

if (FormsAuthentication.Authenticate(tbUsername.Text, tbUsername.Text)) {
   MembershipUser user = Membership.GetUser(tbUsername.Text);
   // Set session variables here.
   FormsAuthentication.RedirectFromLoginPage(tbUsername.Text, rememberMe.Checked);
}

2

根据您的实现方式而定,如果您没有使用ASP登录控件并且正在自行进行身份验证,则需要像这样设置AuthCookie...

string userName = UserName.Text;
string password = Password.Text;

if (Membership.ValidateUser(userName, password))
{
   FormsAuthentication.SetAuthCookie(userName, true);

   MembershipUser user = Membership.GetUser();

   if(user != null){
      // success
   }
   else{
      // failed
   }
}

0

如果您没有使用登录控件,您是否尝试过调用FormsAuthentication.RedirectFromLoginPage(authorizedUserName, createPersistantCookie)并在此之后进行检查?

如果您正在使用登录控件,则可能有一个事件可以处理以获取所需的数据,例如LoggedIn


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接