toArray())) { return null; } $user = $this->userRepository->findByEmail($credentials->email); $user->tokens()->delete(); $accessToken = $user->createToken('access_token', ['access'], Carbon::now()->addMinutes(15))->plainTextToken; $refreshToken = $user->createToken('refresh_token', ['refresh'], Carbon::now()->addDays(30))->plainTextToken; return ['access_token' => $accessToken, 'refresh_token' => $refreshToken, 'user' => $user]; } public function refresh(RefreshTokenDto $refreshToken): ?array { $tokenModel = $this->personalAccessTokenRepository->findToken($refreshToken->token); if (!$tokenModel || $tokenModel->abilities[0] !== 'refresh' || $tokenModel->expires_at < Carbon::now()) { return null; } $user = $tokenModel->tokenable; if (!$user) { return null; } $user->tokens()->delete(); $accessToken = $user->createToken('access_token', ['access'], Carbon::now()->addMinutes(15))->plainTextToken; $refreshToken = $user->createToken('refresh_token', ['refresh'], Carbon::now()->addDays(30))->plainTextToken; return ['access_token' => $accessToken, 'refresh_token' => $refreshToken, 'user' => $user]; } public function logout(): void { $user = Auth::user(); $userModel = $this->userRepository->find($user->id); $userModel->tokens()->delete(); } }