Laravelで認証が必要なAPIをごにょごにょ

どうもこんにちは。
Laravelばっかりです。

今回は、API認証です。
Laravel 5.8から、API認証のドキュメントがPassportを使わない方法になってます。
ちょっとお試しです。

ドキュメント ⇒ API認証 5.8 Laravel


Migration

公式ドキュメントのとおりにやります。
■コマンド
php artisan make:migration prepare_users_table_for_api_token --table users

作成されたファイルを編集です。

あとはmigrate。

php artisan migrate

ここまでで準備完了です。


トークンの設定

今回、画面から要認証なAPIを使いたいので、トークン発行後Cookieに仕込みたいと思います。
とりあえず、画面アクセスのたびにCookieの有無を確認し、なければ発行する、
というような仕掛けにしようと思います。

■middleware
php artisan make:middleware GenerateApiToken

作成されたファイルを編集です。
ランダムな文字列を作って、Userモデル更新と同時にCookieに保存します。
Cookieの作り方は、CSRFトークンを作っているあたりを参考にしています。

app\Http\Kernel.phpに追加します。

あと、Cookieの暗号化の対象から外します。
これ、やらないと動きませんでした。本当はトークンをハッシュ化したり
そもそもLaravel Passportとかそっちでがんばれ
という話かもしれませんが、今回は、ライトに、ライトに。

app\Http\Middleware\EncryptCookies.php の $exceptに追加します。


APIのルーティング

認証が必要なAPIには、auth:apiのミドルウェアが必要です。
私のバージョンのroutes/api.phpには

すでにいらっしゃいました。auth:apiを持ったAPIが。
他にも、認証が必要なAPIは、ルーティング設定で記述するなり、
Controllerのコンストラクタに記述するなり、好きにしたらいいじゃない。


javascript

ここまでLaravelの設定でしたが、あとはJavascriptからajax通信をしましょう。
いうまでもなく、みんな大好きjQueryです。

 
あ、Cookieの取得には、js-cookieを使ってます。
詳しくはコチラ ⇒ GitHub – js-cookie/js-cookie: A simple, lightweight JavaScript API for handling browser cookies

headersに、リクエストヘッダに’Authorization: Bearer [APIトークン]’が含まれるように
値を放り込んでいます。
ミドルウェアは、このヘッダのトークンを見て、確認をするようですね。


最後に

トークンの有効期限をサーバでもチェックしたり、
usersテーブルのapi_tokenをハッシュ化しておいたり、
ログアウトした時はさすがにapi_tokenをnullにしてみたり、
ユーザが任意にトークンの更新をできるようにしたり、
なにかもろもろ足りない感はありますが
ライトにいくなら、こんなものでしょうか。

Laravel Passportは時間があったら試します。

r.tanakaがお届けしました。

ごきげんよう

“Laravelで認証が必要なAPIをごにょごにょ” への 0 件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です