Laravel重写EloquentUserProvider以更改validateCredentials()中的密码字段名称

时间:2016-03-01 16:29:45

标签: php laravel laravel-5 laravel-5.2

我设法通过覆盖各种类/方法来更改代码中的密码字段。但是在尝试覆盖EloquentUserProvider并且它的validateCredentials()方法后,我一直收到错误 -

ErrorException in AuthUserProvider.php line 15:
Argument 1 passed to App\Providers\AuthUserProvider::__construct() must be an instance of App\Helpers\Sha1Hasher, instance of Illuminate\Foundation\Application given

我创建了一个覆盖App \ Providers \ AuthUserProvider.php -

namespace App\Providers;

use Illuminate\Contracts\Auth\Authenticatable as UserContract;
use App\Helpers\Sha1Hasher as HasherContract;
use Illuminate\Auth\EloquentUserProvider;

class AuthUserProvider extends EloquentUserProvider
{
/**
 * AuthUserProvider constructor.
 * @param HasherContract $hasher
 * @param string $model
 */
public function __construct(HasherContract $hasher, $model)
{
    parent::__construct($hasher, $model);
}

/**
 * Validate a user against the given credentials.
 *
 * @param  \Illuminate\Contracts\Auth\Authenticatable  $user
 * @param  array  $credentials
 * @return bool
 */
public function validateCredentials(UserContract $user, array $credentials)
{
    // $plain = $credentials['sha_pass_hash'];
    // return HasherContract::check(...);;
}
}

使用Laravel 5.2.22。

1 个答案:

答案 0 :(得分:2)

你是如何覆盖' EloquentUserProvider的实例?因为Laravel正在根据您设置的Auth创建auth.driver实例。

检查Illuminate/Auth/CreatesUserProviders@createUserProvider根据驱动程序硬编码加载EloquentUserProvider。你可以尝试bind你的Illuminate\Auth\EloquentUserProvider实例。

您收到的错误表示您的__construct未获得正确的输入。根据您的代码的样子,它基本上是这样做的:

new AuthUserProvider($app);

但它应该做什么:

return new EloquentUserProvider($this->app['hash'], $config['model']);

如果不起作用,请尝试通过AuthManager类注册自定义提供程序。见Illuminate\Auth\AuthManager@provider行+ - 266。

也许!!未经测试:

auth()->provider(AuthUserProvider::class);