Laravel Sanctumを試してみる
概要
ISRを利用したサイト開発を行うにあたり、認証周りの調査を行っていた。
その中でLaravel Sanctumの存在を知ったので遊んでみる。
所感
古き良きCookieを使ったセッションの仕組みを、トークンで再現した感。
試してみる
Laravel Sanctumとは
Laravel Sanctum(サンクタム、聖所)は、SPA(シングルページアプリケーション)、モバイルアプリケーション、およびシンプルなトークンベースのAPIに軽い認証システムを提供します。Sanctumを使用すればアプリケーションの各ユーザーは、自分のアカウントに対して複数のAPIトークンを生成できます。これらのトークンには、そのトークンが実行できるアクションを指定するアビリティ/スコープが付与されることもあります。 https://readouble.com/laravel/8.x/ja/sanctum.html
SPA向けの認証システムらしい。
導入に関しては引用の記事を見ればできるので、ここでは割愛。
独自の設定に取り込む
記事では標準のUserModelに対する組み込みを記載されているが、標準以外も動くか気になった。 その場合も、HasApiTokensのTraitで差し込むことで実装できる。
<?php declare(strict_types=1); namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens; class Hoge extends Model { use HasApiTokens, HasFactory, Notifiable;
独自のログイン情報でも下記のようにトークンが返ってくる。
$ curl -X POST http://localhost:8088/api/v1/tokens/create -H "accept: application/json" -H "Content-Type: application/json" -d "{\"id\":\"id\", \"pass\":\"パス\"}" {"token":"1|LaMzf5HxLkrKDS0sLfCdWZwhf8QNNem77qa03l29"}
発行のコードはこんな感じで、テーブルにデータを作る仕組みになっている。
public function createToken(string $name, array $abilities = ['*']) { $token = $this->tokens()->create([ 'name' => $name, 'token' => hash('sha256', $plainTextToken = Str::random(40)), 'abilities' => $abilities, ]); return new NewAccessToken($token, $token->getKey().'|'.$plainTextToken); }
古き良きCookieを使ったセッションの仕組みを、トークンで再現した感がある。 同じパラメータで渡すと、新しいトークンが返ってくるところも似ている。