概要
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を使ったセッションの仕組みを、トークンで再現した感がある。 同じパラメータで渡すと、新しいトークンが返ってくるところも似ている。