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");
        }
    }
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top