Laravel 5.4 EloquentUserProvider覆盖validateCredentials

Ser*_*mok 6 laravel

public function validateCredentials(UserContract $user, array $credentials)
    {
        $plain = $credentials['password'];

        return $this->hasher->check($plain, $user->getAuthPassword());
    }
Run Code Online (Sandbox Code Playgroud)

如何覆盖validateCredentials类中的方法EloquentUserProvider?谢谢!

mhe*_*ier 18

在Laravel 5.4中,您无需在config/app.php中注册CustomUserProvider.

首先,在Providers目录中创建一个CustomUserProvider.php文件:

<?php

namespace App\Providers;

use Illuminate\Auth\EloquentUserProvider as UserProvider;
use Illuminate\Contracts\Auth\Authenticatable as UserContract;


class CustomUserProvider extends UserProvider {

    public function validateCredentials(UserContract $user, array $credentials)
    {
        $plain = $credentials['password'];

        return $this->hasher->check($plain, $user->getAuthPassword());
    }

}
Run Code Online (Sandbox Code Playgroud)

在此之后,更改AuthServiceProvider.php文件中的boot()Method :

public function boot()
{
    $this->registerPolicies();

    \Illuminate\Support\Facades\Auth::provider('customuserprovider', function($app, array $config) {
        return new CustomUserProvider($app['hash'], $config['model']);
    });
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以通过将驱动程序名称添加到config/auth.php文件来使用提供程序:

'providers' => [
    'users' => [
        'driver' => 'customuserprovider',
        'model' => App\User::class,
        'table' => 'users',
    ],
],
Run Code Online (Sandbox Code Playgroud)

  • 也在 Laravel 7 中工作 (3认同)

Tro*_*yer 4

您可以创建自己的 UserProvider,然后可以覆盖原始 UserProvider 中的功能。

首先创建 CustomUserProvider:

use Illuminate\Contracts\Auth\UserProvider;
use Illuminate\Contracts\Auth\Authenticatable as UserContract;

class CustomUserProvider extends UserProvider {

  public function validateCredentials(UserContract $user, array $credentials)
  {
    $plain = $credentials['password'];

    return $this->hasher->check($plain, $user->getAuthPassword());
  }

}
Run Code Online (Sandbox Code Playgroud)

然后在 config/app.php 中注册新的 CustomUserProvider

'providers' => array(
   ... On the bottom, must be down to override the default UserProvider
   'Your\Namespace\CustomUserProvider'
),
Run Code Online (Sandbox Code Playgroud)