Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Autenticação com Auth no Laravel com outra tabela de usuarios

Fala galera

Estou criando uma aplicação no laravel em que eu não estou usando a tabela de Users padrão, eu criei duas tabelas de usuário sendo de Admin e Clientes.

A questão é que quando eu vou fazer o Auth::attempt aparentemente não esta criptografando a senha.

Eu já mudei o arquivo config/auth.php com os novos guards, não sei se devo fazer mais configurações

Arquivo config/auth.php

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'admin' => [
            'driver' => 'session',
            'provider' => 'admin',
        ],

        'cliente' => [
            'driver' => 'session',
            'provider' => 'cliente',
        ],
    ],
    
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => env('AUTH_MODEL', App\Models\User::class),
        ],

        'admin' => [
            'driver' => 'eloquent',
            'model' => env('AUTH_MODEL', App\Models\Admin::class),
        ],

        'cliente' => [
            'driver' => 'eloquent',
            'model' => env('AUTH_MODEL', App\Models\Cliente::class),
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],

Model Admin.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class Admin extends Authenticatable
{
    use HasFactory, Notifiable;

    protected $connection = 'oracle';
    protected $table      = 'ARQATD_UNIADM';
    protected $primaryKey = 'ADMIN_ID';
    protected $fillable   = [
        'ADMIN_ID',
        'NOME_ADM',
        'EMAIL_ADM',
        'SENHA_ADM',
        'SUPER_ADM',
        'ATIVO_ADM',
    ];
    protected $hidden = [
        'SENHA_ADM'
    ];

    protected function casts(): array
    {
        return [
            'SENHA_ADM' => 'hashed',
        ];
    }

    public function getAuthPassword() {
        return $this->SENHA_ADM;
    }
}

Seeder para incluir o usuario

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\DB;

class UNIADM_Seeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        DB::table ('ARQATD_UNIADM')->insert([
            'NOME_ADM'  => 'Usuario',
            'EMAIL_ADM' => 'email-example@hotmail.com',
            'SENHA_ADM' => Hash::make('123'),
            'SUPER_ADM' => 1,
            'ATIVO_ADM' => 1
        ]);
    }
}

Arquivo LoginController.php

<?php

namespace App\Http\Controllers;

use App\Http\Requests\LoginRequest;
use Illuminate\Http\Request;
use RealRashid\SweetAlert\Facades\Alert;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;

class LoginController extends Controller
{
    public function indexAdm()
    {        
        return view('login/index', ['tpLogin' => 'adm']);
    }

    public function indexCli()
    {        
        return view('login/index', ['tpLogin' => 'cli']);
    }
    
    public function logarAdm(LoginRequest $request)
    {
        if (!Auth::guard('admin')->attempt(['EMAIL_ADM' => $request->input('email'), 'SENHA_ADM' => $request->input('senha')]))
            return to_route('login-adm')->withErrors('Usuário e/ou senha inválidos')->withInput();

        return to_route('painel/home');
    }

    public function logarCli()
    {
        //
    }
}

Quando faço o login, esse é o select que o laravel esta fazendo:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Percebe que ele não esta transformando a senha em HASH pelo metodo Auth::attempt

1 resposta
solução!

Consegui resolver, a única coisa de errado que estava fazendo, é que no model Admin, estava colocando no método com a variável SENHA_ADM maiúsculo, sendo que teria q ser minúsculo

Errado:

    public function getAuthPassword() {
        return $this->SENHA_ADM;
    }

Certo:

    public function getAuthPassword() {
        return $this->senha_adm;
    }