personal access token create and del

This commit is contained in:
xiaomlove
2025-02-13 01:48:33 +08:00
parent e45b7c42f0
commit 0d7cbcde9f
6 changed files with 118 additions and 26 deletions

View File

@@ -2,9 +2,11 @@
namespace App\Http\Controllers;
use App\Exceptions\NexusException;
use App\Http\Resources\ExamResource;
use App\Http\Resources\UserResource;
use App\Models\LoginLog;
use App\Models\PersonalAccessTokenPlain;
use App\Models\Setting;
use App\Models\User;
use App\Repositories\AuthenticateRepository;
@@ -103,4 +105,46 @@ class AuthenticateController extends Controller
return response()->json(["success" => false, "msg" => $exception->getMessage()]);
}
}
public function addToken(Request $request)
{
try {
$request->validate([
'name' => 'required|string',
]);
$user = Auth::user();
$count = $user->tokens()->count();
if ($count >= 5) {
throw new NexusException("Token limit exceeded");
}
$newAccessToken = $user->createToken($request->name);
PersonalAccessTokenPlain::query()->create([
'access_token_id' => $newAccessToken->accessToken->getKey(),
'plain_text_token' => $newAccessToken->plainTextToken,
]);
return $this->success(true);
} catch (\Exception $exception) {
return $this->fail(false, $exception->getMessage());
}
}
public function delToken(Request $request)
{
try {
$request->validate([
'id' => 'required|integer',
]);
$user = Auth::user();
$token = $user->tokens()->where("id", $request->id)->first();
if ($token) {
PersonalAccessTokenPlain::query()->where("access_token_id", $token->id)->delete();
$token->delete();
}
return $this->success(true);
} catch (\Exception $exception) {
return $this->fail(false, $exception->getMessage());
}
}
}

View File

@@ -13,6 +13,7 @@ class VerifyCsrfToken extends Middleware
* @var array
*/
protected $except = [
self::TG_WEBHOOK_PREFIX . "/*"
self::TG_WEBHOOK_PREFIX . "/*",
"web/token/*",
];
}

View File

@@ -0,0 +1,11 @@
<?php
namespace App\Models;
class PersonalAccessTokenPlain extends NexusModel
{
protected $fillable = ['access_token_id', 'plain_text_token'];
public $timestamps = true;
}