gpt4 book ai didi

Laravel 自定义认证用户字段

转载 作者:行者123 更新时间:2023-12-05 06:45:49 27 4
gpt4 key购买 nike

我用服装字段名称创建了一个表字段 fld_ID, fld_Username, fld_Password 但我不能在简单的 laravel 身份验证上使用此字段类型,所以我在 user 上定义了我的 ID 字段名称模型 除了 laravel-4:

protected $primaryKey = 'fld_ID';

和密码名称:

public function getAuthPassword() {
return $this->attributes['fld_Password'];
}

最后为我在 Post Action 上的用户名定义了一个用于尝试的用户名类型:

$input = Input::all();
$user['fld_Username'] = $input['fld_Username'];
$user['fld_Password'] = $input['fld_Password'];

if (Auth::attempt($user)){
....Some Code Here... :)
}

但我仍然有问题,Auth::attempt 返回 false,我最后的查询日志是这样的:

Array ( [query] => select * from `tbl_users` where `fld_Username` = ? and `fld_Password` = ? limit 1 [bindings] => Array ( [0] => username [1] => password )

密码在保存前经过哈希处理。

最佳答案

因为您更改了密码字段的名称,所以您需要创建一个自定义用户提供程序并将其注册到配置文件中。

正如您在 vendor\laravel\framework\src\Illuminate\Auth\EloquentUserProvider.php 中看到的那样第 138 行密码字段是硬编码的,没有其他方法可以更改它。

所以在某个地方创建一个类是这样的应用程序文件夹:

class CustomUserProvider extends EloquentUserProvider
{

public function retrieveByCredentials(array $credentials)
{
if (isset($credentials['fld_Password'])) {
unset($credentials['fld_Password']);
}

return parent::retrieveByCredentials($credentials);
}

public function validateCredentials(UserContract $user, array $credentials)
{
$plain = $credentials['fld_Password'];
return $this->hasher->check($plain, $user->getAuthPassword());
}

}

现在你需要将这个用户提供者引入 laravel。只需将其添加到 app\Providers\AuthServiceProvider.php :

class AuthServiceProvider extends ServiceProvider
//...

public function boot()
{
\Auth::provider('CustomUserProvider', function ($app, array $config) {
return new CustomUserProvider($app['hash'], $config['model']);
});
}

//...
}

还差一步。在 config/auth.php编辑 providers像这样的部分:

    'providers' => [
'users' => [
'driver' => 'CustomUserProvider', // make sure you change this
'model' => CustomUserModel::class, // here is your custom model
],
],

希望对您有所帮助。

关于Laravel 自定义认证用户字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21108114/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com