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

Problemas com Auth... nao funciona da forma esperada.

tenho minha function abaixo, ja realizei os testes com os dados da tabela usando eloquent e funciona normalmente... porem no script abaixo ele diz que o usario e senha estão incorretos. alguem pode me ajudar com oque pode estar acontecendo ?

public function login(){
        $email = Request::input('email');
        $password = Request::input('password');


        if (Auth::attempt(['email' => $email, 'password' => $password])) {
            return "Usuário NOME logado com sucesso";
        }else {
            return "As credencias não são válidas";
        }

    }
10 respostas

Oi Emerson, apenas vendo esse trecho de código é difícil dizer qual é o problema, você consegue me disponibilizar seu projeto para testes?

dificil... pois tem muitas conexoes com bancos...

posso disponibilizar todos os codigos aqui... mas meu problema e justamente

public function teste(){
        $user =  usuario::all();
        return view('pdf.teste')->with('user',$user);

    }

este codigo busca tudo certinho... porem o Auth parece que nao entende... ele sempre entra na condição que nao ha combinação.

Consegui resolver da forma abaixo, porem não sei se é a mais correta.

public function login(){
        $email = Request::input('email');
        $password = Request::input('password');

        $users = users::where('email', $email)
            ->first(); // buscando um registro desse pontuário

        if ($users) // encontrou o usuário
        {
            if ($password == $users->password) // conferindo senha
            {
                Auth::login($users); // autentica o usuário
                return view('home.index');

            }
            else
            {
                return redirect('/')->with('Senha invalida!');
                //senha inválida...
            }
        }
        else
        {
            return Redirect::to('/')->withErrors('Email ou senha inválidos!');
        }

    }

Oi Emerson, dá uma olhada no exemplo da documentação, ele é bem mais direto e simples, você não precisa buscar o usuário e comparar as senhas, na verdade, comparar as senhas não é uma boa prática, é inseguro.

https://laravel.com/docs/5.7/authentication#authenticating-users

Dado que você recebe os dados de email e senha, bastaria fazer:

if (Auth::attempt([ 'email' => $email, 'password' => $password ])) {
    return redirect()->intended('dashboard');
}

E tudo que você precisa ter no banco de dados é uma coluna na tabela de usuários chamada remember_token mesmo que você não use.

Ai no else, você poderia fazer como já fez no seu código. Retornar os erros e tal.

Pegou a ideia? Na documentação ainda mostra que você pode pegar o array com login e senha direto usando o método only do objeto da requisição.

Que tal tentar dessa forma?

o problema de usar essa forma que mencionou e que ele sempre da como negado a autenticação. que foi o primeiro erro do topico.

Entendi, mas não será algo relacionado as tabelas do banco? Me parece que suas senhas estão guardadas como texto ao invés do resultado de uma criptografia como o Laravel trabalha por padrão. Isso faria as comparações darem sempre falso.

Então wanderson... minhas senhas nao estao encryptadas... acho que pode ser isso... mas agora surgiu de como comparar elas... sei que tem a função do laravel bcrypt(); para gerar a hash...

solução!

Ah, por isso que o Auth padrão não funcionava, nesse caso, você tem duas opções, continua como está ou migra todas as senhas para usar criptografia (boa prática).

O Laravel disponibiliza a class Hash pra fazer isso.

Hash::make($user->password)

A documentação até tem exemplos de como usar: https://laravel.com/docs/5.7/hashing#basic-usage

usei a bcrypt() e regravei todas as senhas com criptografia... agora esta funcionando tudo certinho! Muito Obrigado pelas dicas.

Ótimo, podemos marcar o tópico como solucionado então? Vai na resposta que te ajudou e clica lá em "marcar como solução". Isso ajuda a saber facilmente qual foi a solução e que o tópico realmente foi resolvido.