わきゃ〜〜
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();
}
参考文献