php - Laravel Passport:使用自定义密码
问题描述
我想使用user_password
而不是仅password
用于我的 API 数据库的密码列的名称。所以这是login()
在 my 中检索令牌的方法的代码PassportController
:
public function login() {
if (Auth::attempt(['user_login' => request('login'), 'password' => request('user_password')])) {
$user = Auth::user();
$success['token'] = $user->createToken('ToutelaBreizh')->accessToken;
return response()->json(['success' => $success], $this->successStatus);
} else {
return response()->json(['error' => 'Unauthorised.'], 401);
}
}
对这个控制器的请求参数是login
和password
。
问题是当我转到与此控制器关联的路由时,比如说POST /api/login
。我收到此错误:
ErrorException:未定义的索引:文件中的密码... EloquentUserProvider.php 位于第 133 行
[堆栈跟踪的第一行...]
- ... PassportController.php:21
我的 PassportController 中的第 21 行是我在上面发布的登录功能的第二行,实际上,password
我写的凭据中没有通知该字段:我写user_password
而不是password
,但字符串password
在 EloquentUserProvider.php 中硬编码,第 133 行:
public function validateCredentials(UserContract $user, array $credentials)
{
$plain = $credentials['password'];
return $this->hasher->check($plain, $user->getAuthPassword());
}
正如这个答案所建议的,我试图覆盖模型validateForPassportPasswordGrant($password)
中的,User.php
但它没有帮助:
public function validateForPassportPasswordGrant($password)
{
return Hash::check($password, $this->user_password);
}
我应该怎么做才能user_password
在我的数据库中而不是password
?
谢谢您的帮助。
解决方案
这个问题实际上并不是 Passport 特有的,它更多地与从 Passport 抽象出来的 Auth Guard 行为有关。只需将其添加到您的用户模型中:
/**
* Get the password for the user.
*
* @return string
*/
public function getAuthPassword()
{
return $this->user_password;
}
Laravel 开箱即用的App\User
模型 extends Illuminate\Foundation\Auth\User
,它使用了Illuminate\Auth\Authenticatable
trait。该特征只是满足Illuminate\Contracts\Auth\Authenticatable
接口条件的一种便利,其中之一是基本上为您的密码字段命名的任何获取器。你会覆盖这个。
顺便说一句,在授权类型的上下文中,“密码”这个词是完全不同的东西,而不是你应该像那样改变的东西。这更多地与配置参考有关,而不是数据库字段。
推荐阅读
- html - 特定类的 CSS 中的通配符 *
- vue.js - 为什么 vue 在包含静态插槽时需要强制更新组件
- python - 如何使用 selenium python 在页面顶部的导航栏中单击项目?
- javascript - 如何使按钮在 JavaScript 的新选项卡中打开链接?
- python - 熊猫数据框掩码将值写入新列
- sed - 为什么选项卡不会插入到添加的第一行?
- java - 按下开始按钮后如何将初始延迟设置为特定时间(HH:mm:ss)格式
- php - 找不到文件时,公共函数不返回错误消息
- twitter-bootstrap - 如何修复 IE 中的这个下拉菜单?
- android - 如何在 Android 上获得超过 500 个联系人列表?