如何使用带有自定义用户名列的 Laravel Passport
Posted
技术标签:
【中文标题】如何使用带有自定义用户名列的 Laravel Passport【英文标题】:How to use Laravel Passport with a custom username column 【发布时间】:2017-01-04 19:34:45 【问题描述】:现在我正在使用类似的东西在我的基础站点上对用户进行身份验证:
if (Auth::attempt($request->only(['id', 'password'])))
//
如何修改此代码以使用自定义列作为用户名? https://laravel.com/docs/5.3/passport#password-grant-tokens
【问题讨论】:
【参考方案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));
是的,我确实已经这样做了,它有帮助,谢谢以上是关于如何使用带有自定义用户名列的 Laravel Passport的主要内容,如果未能解决你的问题,请参考以下文章
如何在 laravel 4.2 中使用带有自定义预过滤器的 AJAX 上传 CSV 文件