Usuário.Identidade.IsAuthenticated é sempre falso no primeiro clique?[duplicado]
-
21-12-2019 - |
Pergunta
Eu tenho um asp.net webforms aplicativo que tem um ecrã de início de sessão.Quando eu clicar no botão de login, o User.Identity.IsAuthenticated
é sempre falso no primeiro clique.Aqui está o código para log in:
protected void SignIn(object sender, EventArgs e)
{
var userStore = new UserStore<ApplicationUser>();
var userManager = new UserManager<ApplicationUser>(userStore);
var user = userManager.Find(UserName.Text, Password.Text);
if (user != null && user.PasswordRetryCount < 3)
{
Session["UserName"] = user.UserName;
var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
var userIdentity = userManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie);
authenticationManager.SignIn(new AuthenticationProperties {IsPersistent = false}, userIdentity);
if (User.Identity.IsAuthenticated) //false on first click
Response.Redirect("Default.aspx");
}
}
Solução 2
Em vez de fazer:
if (User.Identity.IsAuthenticated)
para verificar se o usuário é authenticatd, eu fiz verificada a seguinte propriedade de IdentityResult
o que parece funcionar bem:
if (userIdentity.IsAuthenticated)
Outras dicas
Tiver iniciado uma sessão com o usuário, mas o evento(s) e valores que determinam o IsAuthenticated bandeira não correr até o seu próximo pedido.Ainda no contexto da onu pedido de autenticação.
Qual é o valor de retorno para authenticationManager.SignIn(..)
?Se ele retorna um booleano ou qualquer outra informação que lhe diz se você autenticado com êxito ou não, você pode usar isso como bandeira para a sua if
instrução.
A propriedade do Usuário.Identidade.IsAuthenticated será preenchido com base em cookies de HttpRequest em um aplicativo autenticar evento.Então, no seu caso, esta propriedade terá "false" valor.