【问题标题】:How to use Laravel Passport with a custom username column如何使用带有自定义用户名列的 Laravel Passport
【发布时间】:2017-01-04 19:34:45
【问题描述】:

现在我正在使用类似的东西在我的基础站点上对用户进行身份验证:

if (Auth::attempt($request->only(['id', 'password']))) {
            //
}

如何修改此代码以使用自定义列作为用户名? https://laravel.com/docs/5.3/passport#password-grant-tokens

【问题讨论】:

    标签: php laravel oauth-2.0 laravel-passport


    【解决方案1】:

    回答有点晚了,但我一直很难弄清楚这一点,所以为了完整起见并可能在未来帮助其他人。

    如果您查看this part of passport's code,您会发现它也在寻找validateForPassportPasswordGrant 方法,因此除了Alexander 的回答之外,这就是您可以使用自定义字段对用户进行身份验证的方式。

    希望对某人有所帮助。

    【讨论】:

      【解决方案2】:

      您可以在用户模型中使用 findForPassport 方法。

      此方法以用户名作为参数,并返回用户模型

      例如:

      class User extends Authenticatable
      {
          use HasApiTokens, Notifiable;
      
          // ... some code
      
          public function findForPassport($username) {
              return $this->where('id', $username)->first();
          }
      }
      

      【讨论】:

      • 如果密码也存储在单独的数据库表中呢?或者,如果凭据由第三方 API 验证(在后台)?
      • 如果您的自定义列名为username,您可能需要使用return $this->where('username','=', $username)->first();
      • 如果我必须同时使用电子邮件和手机号码登录怎么办
      • @swatantra 你可以使用类似$this->where(fn($q) => $q->where('email', $username)->orWhere('phone', $username));
      • 是的,我确实已经这样做了,它有帮助,谢谢
      猜你喜欢
      • 1970-01-01
      • 2018-10-17
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      相关资源
      最近更新 更多