| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- <?php
- namespace App\Services;
- use App\Repositories\UserRepositoryInterface;
- use App\Repositories\PersonalAccessTokenRepositoryInterface;
- use Carbon\Carbon;
- use App\DataTransferObjects\AuthDto;
- use App\DataTransferObjects\RefreshTokenDto;
- use Illuminate\Support\Facades\Auth;
- class AuthService
- {
- public function __construct(
- protected UserRepositoryInterface $userRepository,
- protected PersonalAccessTokenRepositoryInterface $personalAccessTokenRepository,
- ) {
- }
- public function login(AuthDto $credentials): ?array
- {
- if (!Auth::attempt($credentials->toArray())) {
- return null;
- }
- $user = $this->userRepository->findByEmail($credentials->email);
- $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];
- }
- 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];
- }
- }
|