SanctumはAPIトークン認証とSPA認証が混ざっている。
片方だけ使うつもりで間違った使い方をしていることがある。
createTokenメソッド自体がsanctumのtraitのHasApiTokensにあるため、これを利用するとguardはsanctumとなる
にある通り、sanctumパッケージ自体がいくつもの認証のために作られており、attemptなんかはcookie認証。
createTokenはAPIToken認証である
$query = Administrator::query()
->where('login_id', $request->login_id);
if (!$query->exists()) {
abort(401, 'ログインに失敗しました');
}
$administrator = $query->first();
if(
//認証
// attemptはcookie認証でありAPIではサポートされない
// https://stackoverflow.com/questions/68255192/laravel-sanctum-delete-current-user-token-not-working
// APIトークンを使う以上ガードはsanctumになるのでガードは意味がない
// !Auth::guard('admin')->attempt($request->only('login_id', 'password'))
!$administrator || !Hash::check($request->password, $administrator->password)
){
//abort...
}
$token = $admin->createToken(self::TOKEN_NAME, [self::TOKEN_ABILITY])->plainTextToken;
return response()->json([
'access_token' => $token,
'token_type' => 'Bearer',
]);