Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
10
respostas

Auth::attempt($credenciais) não funciona

Estou utilizando o método mas ele não funciona. Tenho o email e password gravados no banco mas ele não retorna verdadeiro nunca.

ROTA:

Route::post('/login', 'LoginController@login');

CÓDIGO:

public function login(){

        $credenciais = Request::only('email', 'password');
        var_dump($credenciais);
        if(Auth::attempt($credenciais)){
            return "usuário existe";
        }else{
            return "usuário n existe";
        }
    }

O QUE É IMPRESSO NA TELA:

/home/vagrant/Code/Juridico/app/Http/Controllers/LoginController.php:15:
array (size=2)
  'email' => string 'juridico@paraquedista.eb.mil.br' (length=31)
  'password' => string '123456' (length=6)

usuário n existe
10 respostas
solução!

Oi Rafael, o Laravel normalmente grava as senhas de forma encriptada, você está enviando texto puro sem encriptar antes, pode ser isso, tenta encriptar a senha antes de enviar pro banco pra ver se funciona?

Link da documentação sobre como gerar o hash da senha. https://laravel.com/docs/5.3/hashing

Bom dia, Wanderson. Então eu usei o um Seeder pra gravar um usuário inicial no banco.

Lá no mysql me mostra a senha como 123456.

Tentei com o hash mas parece que ele muda a cada vez que eu chamo o método make.

Hm, se no MySQL está em texto puro assim, então o hash não seria preciso. Mas olha: https://laravel.com/docs/5.3/authentication#included-authenticating

De acordo com a documentação, o attempt vai comprar o hash da senha no banco com o valor passado. Por isso você vai precisar fazer clean no banco e guardar a senhas com hash mesmo pra só assim tentar validar.

Não lembro bem se é preciso fazer hash da senha antes de fazer o attempt. Tenta as duas formas, fazendo hash da senha antes do attempt e sem fazer o hash. Mas lembre-se as senhas no banco de dados devem ser criptografadas, e não em texto puro.

Eu usei o make no Seeder. Rodei de novo ele gerou uma senha embaralhada

$2y$10$v.MwNXA0IfQmeUYR05AXg.kgop0ZXvyMVcOTiAvntGU9ZrhH30Wji

No meu controller

public function login(){
        $email = Request::input('email');
        $password = Hash::make(Request::input('password'));
        if (Auth::attempt(['email' => $email, 'password' => $password])){
            return redirect()->intended('dashboard');
        }else{
            return "erro";
        }
    }

continua não funcionando.

Estou perdido.

Você encriptou as senhas que estão no banco?

Já testei com senha '123456' no banco e encriptada no banco. Usando o seguinte código e só retorna erro.

public function login(){
        $email = Request::input('email');
        $normal = Hash::make(Request::input('password'));
        $hashed = Hash::make(Request::input('password'));

        if (Auth::attempt(['email' => $email, 'password' => $normal])){
            echo "funcionou sem hash <br/>";
        }else{
            echo "erro normal <br/>";
        }

        if (Auth::attempt(['email' => $email, 'password' => $hashed])){
            echo "funcionou com hash <br/>";
        }else{
            echo "erro hash <br/>";
        }
    }

Rafael, você está encriptando nos dois testes. É um com a senha encriptada e outra não.

$normal = Request::input('password');
$hashed = Hash::make(Request::input('password'));

Perdão. Você estava certo, mas mesmo assim não funcionou.

O código:

public function login(){
        $email = Request::input('email');
        $normal = Request::input('password');
        $hashed = Hash::make(Request::input('password'));
        echo $normal."<br>";
        echo $hashed."<br>";

        if (Auth::attempt(['email' => $email, 'password' => $normal])){
            echo "funcionou sem hash <br/>";
        }else{
            echo "erro normal <br/>";
        }

        if (Auth::attempt(['email' => $email, 'password' => $hashed])){
            echo "funcionou com hash <br/>";
        }else{
            echo "erro hash <br/>";
        }
    }

Isso me imprime:

123456
$2y$10$MAQnzot7Q9yC/f6k2cRG6.5SZqp.MeRLuv9lFtO5P4MevbS1/GADy
erro normal
erro hash

Você pode colar o código do seeder aqui? manda pra mim ver uma coisa.

Camarada. Erro meu.

Está funcionando sem o hash. Quando vc falou do Seeder eu decidi verificá-lo e o email que eu estava entrando no formulário da aplicação estava incorreto.

=/

Falta de atenção quando digitei e acabei salvando o e-mail errado com a senha certa. Agradeço a atenção e as orientações.