Help us understand the problem. What is going on with this article?

【サルが書く】Laravelのpassportでの認証するテーブルをカスタマイズ方法

わきゃ〜〜

LaravelのPassportを使い、OAuth2.0のユーザー認証を行いました。
そこで、標準のemail,passwordのみの認証ではない認証方法を取りたかったので、ちょっと調べてみました。

実行環境
Laravel 5.5
Laravel Passport 4.0
PHP 7.x

Laravel Passportは導入した状態でのお話になります。

認証するカラムを変更したい

といっても、かなり簡単にカスタマイズは簡単です。
認証するテーブルのModelに下記のコードを追加するだけです。

usernameを認証するカラムを変更する場合

Model/User.php
public function findForPassport($username)
{
    // 認証カラム名が name の場合
    return $this->where('name', $username)->first();
}

これは実際に認証を行っている、Laravel Passportの Laravel/Passport/Bridge/UserRepository.php にある getUserEntityByUserCredentials() というメソッドがあります。
そのメソッドにModelがfindForPassportというメソッドを持っていれば、メソッドを上書きするような処理があるためです。

認証する条件を変更する

whereをつなげて認証する条件を追加することもできます。
whereで表現できるものであれば、カスタマイズ可能だと思います。

Model/User.php
public function findForPassport($username)
{
    // nameとrole_idの2つの条件で認証を行う
    return $this->where('name', $username)->where('role_id', $role_id)->first();
}

参考文献

http://hakaikosen.hateblo.jp/entry/2017/11/11/084621

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away