Laravelでログイン中のユーザーのabilityがわからなかったので調べる方法を記述しますね。
前提としてsanctumを使った認証機能はすでに作成されている前提で進めていきます。
sanctumを利用した認証については過去に記事に載せたので。
ほんなら進めていきます~
Table of Contents
事前準備
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)
ってな感じでした。
まとめ
最近技術ブログに書くべきか、メモに残しておくべきかっていうのがすごく迷う。。。