Laravel Passport:仅使用用户名登录,没有密码
Laravel Passport: login using only username without password
在我的项目中,我将通过短信发送确认码来验证用户 phone 号码。确认后,我必须向我的 laravel 应用程序发送登录请求。在 Laravel Passport 文档中有登录用户的示例请求:
$response = $http->post('http://your-app.com/oauth/token', [
'form_params' => [
'grant_type' => 'password',
'client_id' => 'client-id',
'client_secret' => 'client-secret',
'username' => 'taylor@laravel.com',
'password' => 'my-password',
'scope' => '',
],
]);
我如何在这里设置为 username
用户 phone
并删除 password
?
如果 password
是 Laravel Passport 中的必填字段,那么我可以从客户端发送任何密码,并在 attempt
用户凭据之前发送请求用户 password
的 owerride。但是我必须在哪里输入密码?
我厌倦了改变LoginController
但没有工作。
登录控制器
protected function validateLogin(Request $request)
{
$request->validate([
$this->username() => 'required|string'
]);
}
protected function credentials(Request $request)
{
$params = [
'password' => '12345678',
];
$request->request->add($params);
return $request->only($this->username(), 'password');
}
public function username()
{
return 'phone';
}
在您的用户模型中使用 findForPassport
方法。
它以用户名作为参数,return用户模型
已回答
class User extends Authenticatable
{
use Notifiable, HasApiTokens;
// Set as username any column from users table
public function findForPassport($username)
{
$customUsername = 'phone';
return $this->where($customUsername, $username)->first();
}
// Owerride password here
public function validateForPassportPasswordGrant($password)
{
$owerridedPassword = 'password';
return Hash::check($password, $this->password);
}
}
在我的项目中,我将通过短信发送确认码来验证用户 phone 号码。确认后,我必须向我的 laravel 应用程序发送登录请求。在 Laravel Passport 文档中有登录用户的示例请求:
$response = $http->post('http://your-app.com/oauth/token', [
'form_params' => [
'grant_type' => 'password',
'client_id' => 'client-id',
'client_secret' => 'client-secret',
'username' => 'taylor@laravel.com',
'password' => 'my-password',
'scope' => '',
],
]);
我如何在这里设置为 username
用户 phone
并删除 password
?
如果 password
是 Laravel Passport 中的必填字段,那么我可以从客户端发送任何密码,并在 attempt
用户凭据之前发送请求用户 password
的 owerride。但是我必须在哪里输入密码?
我厌倦了改变LoginController
但没有工作。
登录控制器
protected function validateLogin(Request $request)
{
$request->validate([
$this->username() => 'required|string'
]);
}
protected function credentials(Request $request)
{
$params = [
'password' => '12345678',
];
$request->request->add($params);
return $request->only($this->username(), 'password');
}
public function username()
{
return 'phone';
}
在您的用户模型中使用 findForPassport
方法。
它以用户名作为参数,return用户模型
已回答
class User extends Authenticatable
{
use Notifiable, HasApiTokens;
// Set as username any column from users table
public function findForPassport($username)
{
$customUsername = 'phone';
return $this->where($customUsername, $username)->first();
}
// Owerride password here
public function validateForPassportPasswordGrant($password)
{
$owerridedPassword = 'password';
return Hash::check($password, $this->password);
}
}