Search code examples
laravellaravel-8laravel-passport

Customize Laravel 8 Passport methods


The login validation I use is not Laravel's default. How do I customize Passport methods?

The following code I use to validate with web middleware.

$username = $request->username;
$password = strtoupper(md5($request->password));

$system = env("CODE_SYSTEM", 12);

$sql = "SELECT user.validate( '$system' , '$username', '$password')";
$stmt = DB::select(DB::raw($sql));
$result = $stmt[0]->validation;

if ($result == "ok") {
    $user = new User();
    $id = DB::table('users')->select('id')
        ->where('username' , $username)->first();
    $user = User::find($id->id);

    return $user;
}

Solution

  • To customize you need add the validateForPassportPasswordGrant() at User method, example:

    public function validateForPassportPasswordGrant($password)
    {
        $password = strtoupper(md5($request->password));
        $system = env("CODE_SYSTEM", 12);
    
        $sql = "SELECT user.validate( '$system' , '$this->username', '$password')";
    
        $stmt = DB::select(DB::raw($sql));
        $result = $stmt[0]->validation;
    
        if ($result == "ok") {
            return true;
        }
    
        return false;
    }
    

    If you need to change the user column name where the passport search username:

    public function findForPassport($username)
    {
        return $this->where('the_username_column', $username)->first();
    }