【Laravel8】sanctumを利用しているユーザーのabilityを取得する方法

Laravelでログイン中のユーザーのabilityがわからなかったので調べる方法を記述しますね。

前提としてsanctumを使った認証機能はすでに作成されている前提で進めていきます。

sanctumを利用した認証については過去に記事に載せたので。

ほんなら進めていきます~

事前準備

routing

ログイン中のユーザーのabilityを確認する必要があるので、Route::middleware('auth:sanctum')でログイン中のユーザーしかアクセスできないroutingを作成しましょう。

//sanctum認証
Route::middleware('auth:sanctum')->group(function(){

        Route::get('user/test', [UserController::class, 'test']);

});
Code language: PHP (php)

controller

/user/testにアクセスすると、以下のcontrollerからログイン中ユーザーの情報を取得するようにします。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;
use Validator;
use Storage;


use Illuminate\Support\Facades\Auth;


class UserController extends Controller
{

    public function test()
    {
        return auth()->user()->currentAccessToken();

    }

}Code language: HTML, XML (xml)

abilityを取得

testメソッドの中身

改めてController内でユーザー情報を取得したところだけをまとめてみますね。

auth()->user()->currentAccessToken(); //認証中ユーザーのすべての情報を取得
auth()->user()->currentAccessToken()->abilities; //abilityに絞って取得


//abilityの中に[admin]abilityがあるかチェック
$abilities = auth()->user()->currentAccessToken()->abilities;
in_array('admin', $abilities);
Code language: PHP (php)

ちなみにroutingでsanctum認証していなくても、tokenさえ持っていたら以下でもユーザー情報は取得できるっぽいぞ。

auth('sanctum')->user()->currentAccessToken(); Code language: PHP (php)

ってな感じでした。

まとめ

最近技術ブログに書くべきか、メモに残しておくべきかっていうのがすごく迷う。。。

コメントを残す

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

CAPTCHA