Solucionado (ver solução)
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.