laravel7.xでlaravel/passportを導入した時の手順
動作環境
php:7.2.5
laravel: 7.0
laravel/passport: 9.3
postgreSQL: 12.2
※事前にcomposerをインストールする必要あり
※DBはお好みの物を使用
環境構築
laravelプロジェクトを作成
どこでもいいのでプロジェクト作りたいディレクトリで下記コマンド実行
$ laravel new laravel_passport
※laravel_passortはプロジェクト名
config/database.phpの設定変更
'default' => env('DB_CONNECTION', 'pgsql'),
'pgsql' => [
'driver' => 'pgsql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '5432'),
'database' => env('DB_DATABASE', 'accounting_software'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', 'rod2yuya'),
'charset' => 'utf8',
'prefix' => '',
'prefix_indexes' => true,
'schema' => 'public',
'sslmode' => 'prefer',
],
.envの変更
DB_CONNECTION= pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=DB名
DB_USERNAME=ユーザ名
DB_PASSWORD=パスワード
※DB名、ユーザ名は今回新たに作成する
app.phpの設定変更
'timezone' => 'Asia/Tokyo',
'locale' => 'ja',
DB作成
DB起動
postgres -D /usr/local/var/postgres
DB接続
psql -h localhost -p 5432 -U ユーザ名 -d postgres
DB作成
create database データベース名 owner ユーザ名;
認証機能を追加
作成したプロジェクト内で操作。
$ composer require laravel/ui
$ php artisan ui vue --auth
以上のコマンドで、レイアウトビュー、登録ログインビューをインストールし、同時にすべての認証エンドポイントのルートも定義。
マイグレーションでテーブル作成
$ php artisan migrate
laravel passportをインストール
ようやく本題。こちらの記事が超参考になりました。
https://qiita.com/zaburo/items/65de44194a2e67b59061
$ composer require laravel/passport
laravel/passortをインストールすると、新たにマイグレーションファイルがインストールされているので、マイグレーションでテーブルを生成する
$ php artisan migrate
DBに下記のテーブルが追加される。
public | oauth_access_tokens | table | root
public | oauth_auth_codes | table | root
public | oauth_clients | table | root
public | oauth_clients_id_seq | sequence | root
public | oauth_personal_access_clients | table | root
public | oauth_personal_access_clients_id_seq | sequence | root
public | oauth_refresh_tokens
Keyの発行
暗号化に利用するシード値などを生成します。
$ php artisan passport:keys
キーが3つ生成されます。生成されたキーはDBのoauth_clientsテーブルに格納されます。
DBに接続し、下記コマンドで確認可能です。
select * from oauth_clients;
laravel passportは物凄く簡単に説明すると、oauth2.0の仕組みを利用しており、アクセスtokenを発行して、アクセスしているユーザが真のユーザであるかを判定する仕組みだと、私は理解しています。
そして、アクセスtokenを発行する際の認証方法として、いくつかのパターンが用意されており、その認証方法により、先ほど作成したkeyのうち、どのkeyを利用するか決まってきます。
今回私は、ID・パスワード方式によりtokenを発行する方法をとるので、使用するkeyは1番最初に発行されたkeyを使います。
(nameというカラムにpasswordと入っているレコードのsecretカラムの値)
テストユーザの作成
これまでの手順ですでにブラウザ上でユーザ登録ができるようになっていますが、面倒なのでコマンドラインで作成。
※ブラウザ上で作成したい場合は、php artisan serveでサーバを立ち上げ、指定されたURLにアクセス
php artisan tinker
$user1 = new App\User;
$user1->name = 'user1';
$user1->email = '[email protected]';
$user1->password = Hash::make('testtest');
$user1->save();
tokenを発行
tokenを発行する際は、oauth/tokenへAPIを叩く必要があります。Postmanなどを使ってもいいですが、あくまで動作確認なので、こちらもコマンドライン上で実行。
まず、laravelのサーバを立ち上げます。
$ php artisan serve
ターミナルからAPIを直接叩きます。
$ curl -X POST -H 'Content-Type: application/json' -d '{"grant_type":"password", "client_id":"1", "client_secret":"発行されたkey(secretカラムの値)", "username":"[email protected]", "password":"testtest","scope":"*"}' http://localhost:8000/oauth/token
以上のながいコマンドを入力し、問題がなければtokenが発行されて返ってきます。
結果
{"token_type":"Bearer","expires_in":31536000,"access_token":"発行されたtoken","refresh_token":"リフレッシュ用のtoken"}
ここで取得できたaccess_tokenを使うことで、ユーザ認証することが可能となります。
取得したtokenを使い、ユーザ情報を取得してみる
curl -H 'Accept: application/json' -H 'Authorization: Bearer 取得したaccess_token' http://localhost:8000/api/user
結果
{"id":1,"name":"user1","email":"[email protected]","email_verified_at":null,"created_at":"2020-07-07T03:29:40.000000Z","updated_at":"2020-07-07T03:29:40.000000Z"}
DBには「oauth_access_tokensaccess_token」にtokenとuser_idが対応付けられて保存されています。
access_tokenを使い、apiのapi/userを叩くことで、サーバ側でtokenによりuser_idを判定しuser_idを使いユーザ情報を取得→返却してくれる、といった流れになります。
以上です。
Author And Source
この問題について(laravel7.xでlaravel/passportを導入した時の手順), 我々は、より多くの情報をここで見つけました https://qiita.com/yu_jin/items/e1531cc13ace1f93ddac著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .