I changed Laravel's default authentication table to use the Attempt method in an Oracle database, so far everything is working smoothly, the problem is that I had to set another column (OBSINFO) of the database to be used as a password because the default password column (PASSWORD) has a database encryption method that can only be revealed using the decrypt(password, userbd) function, how can I apply a decrypt to this password before it is compared in laravel?
LoginController
<?php
namespace App\Http\Controllers;
use App\Models\PCContro;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller
{
public function login(){
return view('login');
}
/**
* Handle an authentication attempt.
*/
public function authenticate(Request $request): RedirectResponse
{
$credentials = $request->validate([
'usuariobd' => ['required'],
'password' => ['required'],
]);
$credentials['usuariobd'] = strtoupper($credentials['usuariobd']);
$credentials['password'] = strtoupper($credentials['password']);
if ( Auth::attempt($credentials)) {
$request->session()->regenerate();
/* Verifica se o usuario que esta logado possui permissão na rotina X EX:215 */
$matricula = User::where('usuariobd',$credentials['usuariobd'])->pluck('matricula')->first();
$permissao = PCContro::where('codusuario',$matricula)->where('codrotina',215)->where('acesso','S')->first();
if (!$permissao){
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return back()->with('error', 'Usuario sem permissão de acesso!');
}
return redirect()->intended('/');
}
return back()->with('error', 'Usuario ou Senha Incorreta!');
}
public function logout(Request $request): RedirectResponse
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/login');
}
}
User Model
<?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
{
protected $table = 'pcempr';
protected $primaryKey = 'matricula';
use HasApiTokens, HasFactory, Notifiable;
/*Altera o identificador padrão do Laravel e Encrypta a coluna do banco*/
public function getAuthPassword()
{
return bcrypt($this->obsinativo);
}
}