| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- <?php
- namespace App\Services;
- use App\Repositories\AuthRepositoryInterface;
- use App\DTO\AuthDTO;
- use App\DTO\RefreshTokenDTO;
- use Illuminate\Support\Str;
- use Illuminate\Support\Facades\Auth;
- class AuthService
- {
- public function __construct(
- protected AuthRepositoryInterface $authRepository,
- ) {}
- public function login(AuthDTO $credentials): ?array
- {
- if (!$this->authRepository->attemptLogin(credentials: $credentials)) {
- return null;
- }
- $user = $this->authRepository->findUserByEmail(email: $credentials->email);
- $deviceId = Str::uuid()->toString();
- $accessToken = $this->authRepository->createAccessToken(user: $user, deviceId: $deviceId);
- $refreshToken = $this->authRepository->createRefreshToken(user: $user, deviceId: $deviceId);
- return [
- 'payload' => [
- 'access_token' => $accessToken,
- 'user' => $user,
- ],
- 'refreshToken' => $refreshToken
- ];
- }
- public function refresh(RefreshTokenDTO $refreshTokenDto): ?array
- {
- if (!$refreshTokenDto->refresh_token) {
- return null;
- }
- $tokenModel = $this->authRepository->findToken($refreshTokenDto->refresh_token);
- if (!$tokenModel || !in_array('refresh', $tokenModel->abilities) || $tokenModel->expires_at < now()) {
- return null;
- }
- $user = $tokenModel->tokenable;
- if (!$user) {
- return null;
- }
- $deviceId = Str::afterLast($tokenModel->name, '_');
- $tokens = $this->authRepository->refreshToken($tokenModel, $user, $deviceId);
- return [
- 'payload' => [
- 'access_token' => $tokens['access_token'],
- 'user' => $user,
- ],
- 'refreshToken' => $tokens['refresh_token']
- ];
- }
- public function logout(): void
- {
- $user = Auth::user();
- if (!$user) {
- return;
- }
- $tokenName = $user->currentAccessToken()->name;
- $deviceId = Str::afterLast($tokenName, '_');
- $this->authRepository->deleteUserTokensByDevice(user: $user, deviceId: $deviceId);
- }
- }
|