1

目前,我正在工作或 lumen(Laravel 的微框架),我已经在该应用程序中集成了护照以供用户登录。

当客户告诉我我们需要同时使用用户名或电子邮件登录时,我被卡住了!

我已经通过更改流明护照内部代码来做到这一点,如下所示

vendor/laravel/passport/src/Bridge/UserRepository.php在此我已将getUserEntityByUserCredentials函数代码更新为

public function getUserEntityByUserCredentials($username, $password, $grantType, ClientEntityInterface $clientEntity)
{
     $provider = config('auth.guards.api.provider');

     if (is_null($model = config('auth.providers.'.$provider.'.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)->orWhere('username', $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());
}

现在,当我每次需要更改此代码时更新供应商目录时。

我可以忍受这种头痛的任何简单方法。

任何帮助表示感谢提前感谢。

4

1 回答 1

3

没想到这么简单,今天刚试了下,成功了

public function findForPassport($username){
    return $user = (new User)->where('email', $username)->orWhere('username', $username)->first();
}

我只是将此方法添加到App\User.php它,它可以按我的意愿完美运行。

于 2018-01-16T10:24:32.533 回答