Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Erro ao realizar Login

O sistema de Login sempre retorna "usuário ou senha incorretos", mesmo sendo estes existindo. Os dados existem no banco de dados, e realizei var_dump com as variáveis da requisição, ambas chegam corretamente.

Método da LoginController, recebido via POST

    public function login(){
        $credenciais = Request::only("email","password");
        if(Auth::attempt($credenciais)){
            return "Usuário logado com sucesso!";
        }
        return "Usuário ou senha incorretos";
    }
7 respostas

Observação: com o código realizado "na mão" funciona.

    public function login(){
        $credenciais = Request::only("email","password");
        $usuario = DB::table("users")->where("email",$credenciais['email'])->where("password",$credenciais['password'])
        ->first();
        if($usuario){
            return "Usuário logado com sucesso!";
        }
        return "Usuário ou senha incorretos";
    }

Oi Henrique, tudo certo?

Você pode mandar pra gente aqui um var_dump do seu Auth::attempt($credenciais) e da $credencias?

Aguardo retorno!

Abraço =)

Olá André, tudo bem e você? Obrigado pelo retorno!

var_dump das $credenciais

C:\xampp\htdocs\LaravelAlura\app\Http\Controllers\LoginController.php:13:
array (size=2)
  'email' => string 'pessolatohenrique@gmail.com' (length=27)
  'password' => string '123456' (length=6)

var_dump de Auth::attempt($credenciais)

C:\xampp\htdocs\LaravelAlura\app\Http\Controllers\LoginController.php:14:boolean false

Parece estar tudo certo.

Qual versão do laravel vc ta usando? Algumas keys mudaram nas novas versões. Por exemplo, a email virou UserEmail.

Tenta rodar com UserEmail e me fala se deu certo =)

Com UserEmail deu erro. No banco de dados, na tabela Users, está o campo email mesmo. Usando um php artisan --version, percebi que a versão está na 5.0, senão me engano, a mesma do curso.

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'UserEmail' in 'where clause' (SQL: select * from `users` where `UserEmail` is null limit 1)
solução!

Beleza!

Dando uma olhada na documentação do laravel 5.0 pra autenticação de usuario eu vi que o método attempt faz um hash no password. Primeiro ele compara os valores de email com o banco, se passar, ele compara o valor da senha (depois do hash) e verifica com a senha do banco considerando que ela passou pelo mesmo processo. Se os dois valores hasheados forem equivalentes ele retorna true e gera a sessão pro usuario, se não retorna false.

Verifica no seu banco como está sendo armazenado essa senha. Possivelmente o problema ta ai.

Espero que funcione ;)

Qualquer dificuldade compartilha com a gente aqui!

Abraço!

Eu tinha realizado a inserção direta pelo banco de dados, pulando a etapa de criptografar a senha na inserção. Agora realizei a inserção diretamente pelo Laravel, e o Login deu certo.

Obrigado!