讨论数量:
passport 我自己也在探究能不能使用一种更友好的方式来获取 token,至于多种方式登录的话你可以根据请求的字段来获取 passport 需要的字段,比如手机号登录,可以根据手机号来查询 email,没有就 false,再去请求 token
# vendor\laravel\passport\src\Bridge\UserRepository.php
public function getUserEntityByUserCredentials($username, $password, $grantType, ClientEntityInterface $clientEntity)
{
if (is_null($model = config('auth.providers.users.model'))) {
throw new RuntimeException('Unable to determine user model from configuration.');
}
if (method_exists($model, 'findForPassport')) {
$user = (new $model)->findForPassport($username);
} else {
$user = (new $model)->where('email', $username)->first();
}
if (! $user ) {
return;
} elseif (method_exists($user, 'validateForPassportPasswordGrant')) {
if (! $user->validateForPassportPasswordGrant($password)) {
return;
}
} elseif (! $this->hasher->check($password, $user->password)) {
return;
}
return new User($user->getAuthIdentifier());
}
这个是 passport 中的一小段源码,可以看得到除了 findForPassport 来解决通过其他字段获取用户之外还有 validateForPassportPasswordGrant 来验证该用户的合法性,两个方法都可以在 User Model 中进行定义。
关于 LearnKu
推荐文章: