2
respostas

Problemas com Autenticação no Laravel: Sempre Retorna "false"

Fala turma! Estou enfrentando um problema na autenticação de usuários no meu sistema Laravel. Estou utilizando a Facade Auth para fazer o login, mas mesmo com as credenciais corretas, o sistema sempre retorna "usuário inválido". A situação é a seguinte:

Eu estou usando a função Auth::attempt() para validar o login, e na documentação do Laravel diz que ao usar essa função, não é necessário fazer o hash da senha manualmente, pois o próprio Laravel cuida disso internamente. Porém, apesar de seguir esse procedimento, a autenticação não está funcionando e a resposta continua sendo que o usuário é inválido.

Alguns detalhes:

Estou utilizando campos personalizados no banco, como email_Usuario e senha_Usuario, ao invés dos padrões email e password. A chave primária da tabela de usuários também não é o padrão id, mas um campo personalizado chamado CD_Usuario.

Problema atual: Mesmo com as credenciais corretas (email e senha), o Laravel retorna sempre "usuário inválido". E como o Auth::attempt() deve lidar automaticamente com o hash da senha, não entendi por que isso não está funcionando corretamente.

Alguém já passou por algo semelhante ou tem alguma dica de como posso corrigir isso? Segue os códigos abaixo:

Arquivo: UsuarioController.php (cria o usuário):

<?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;

class UsuarioController extends Controller
{
    //Index
    public function index()
    {
        return view('cadastrar.cadastrar-usuario');
    }

    //Store (cadastra novo usuário no banco de dados)
    public function create(Request $request)
    {
        $data = $request->except('_token');
        $data['senha_Usuario'] = Hash::make($data['senha_Usuario']);
        $usuario = User::create($data);

        if($usuario){
            return to_route('login');
        }
        
        return redirect()->back()->withErrors('Erro ao cadatrar o usuário');
    }

}

Arquivo LoginController.php (Realiza o login):

<?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;

class LoginController extends Controller
{

    //Retorna a view página de login
    public function index()
    {
        return view('paginas.login');
    }

    //Cria o login de fato
    public function store(Request $request)
    {

        if (Auth::attempt($request->only('email_Usuario', 'senha_Usuario'))) {
            return redirect()->back()->withErrors('Credenciáis Inválidas');
        }

        return to_route('auth');
    }

    //Destoi o login do usuário
    public function destroy()
    {
        Auth::logout();
        return to_route('login');
    }
}

Arquivo User.php (Model do usuário):

<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

    protected $connection =  'mysql'; //Educa_Gestor
    protected $table = 'usuarios';
    protected $primaryKey = 'CD_Usuario';

    public $timestamps = false;

    protected $fillable = [
        'CD_Usuario',
        'nome_Usuario',
        'email_Usuario',
        'escolaridade_Usuario',
        'senha_Usuario',
        'nivel_Usuario',
        'DT_Nasc_Usuario',
        'usuario_Cadastrador',
        'DT_Cadastro_Usuario',
        'status_Usuario',
    ];
}

**Rotas: **

//Cadastrar Usuário
Route::get('/cadastrar', [UsuarioController::class, 'index'])->name('cadastrar.index');
Route::post('/cadastrar', [UsuarioController::class, 'create'])->name('cadastrar.create');

//Login e Logout
Route::get('/login', [LoginController::class, 'index'])->name('login');
Route::post('/login', [LoginController::class, 'store'])->name('login.store');

Lembrando que o usuário está cadastrado corretamente e a senha é criptografada com sucesso.

2 respostas

Oi Estudante,

O problema que você está enfrentando parece estar relacionado ao uso da função Auth::attempt() com campos personalizados. Embora a função attempt deva lidar com a verificação de senha automaticamente, o Laravel espera que os campos de email e senha sejam chamados exatamente de 'email' e 'password', respectivamente. Como você está usando 'email_Usuario' e 'senha_Usuario', é necessário informar ao Laravel sobre isso.

Para resolver o problema, você pode modificar a função store no seu LoginController para especificar os nomes dos campos personalizados corretamente. Aqui está a correção:

public function store(Request $request)
{
    // Valida os campos de entrada
    $request->validate([
        'email_Usuario' => 'required|email',
        'senha_Usuario' => 'required',
    ]);

    // Tenta autenticar com os campos personalizados
    if (Auth::attempt(['email_Usuario' => $request->email_Usuario, 'senha_Usuario' => $request->senha_Usuario])) {
        // Redireciona para a página desejada após sucesso
        return redirect()->intended('home'); // Altere 'home' para a rota desejada
    }

    return redirect()->back()->withErrors('Credenciais Inválidas');
}

Além disso, verifique se a tabela de usuários com os campos 'email_Usuario' e 'senha_Usuario' está corretamente configurada e se os dados estão sendo salvos e recuperados corretamente.

Outra questão a considerar é a configuração do seu modelo User. Como você está usando 'CD_Usuario' como chave primária, certifique-se de que o Laravel está configurado para lidar com isso corretamente, o que parece estar correto no seu caso.

Essas mudanças devem ajudar a resolver o problema de autenticação. Se você continuar enfrentando dificuldades, considere adicionar logging para verificar o que está acontecendo durante o processo de autenticação.

tux matrix    Caso este post o tenha ajudado, por favor, marcar como solucionado ☑️. Bons Estudos! 🤓

Nada. Continua o mesmo erro.