mirror of
https://github.com/cedar2025/Xboard.git
synced 2025-01-23 02:58:14 -05:00
57 lines
1.3 KiB
PHP
57 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use App\Models\User;
|
|
use Illuminate\Support\Str;
|
|
use Laravel\Sanctum\PersonalAccessToken;
|
|
|
|
class AuthService
|
|
{
|
|
private User $user;
|
|
|
|
public function __construct(User $user)
|
|
{
|
|
$this->user = $user;
|
|
}
|
|
|
|
public function generateAuthData(): array
|
|
{
|
|
// Create a new Sanctum token with device info
|
|
$token = $this->user->createToken(
|
|
Str::random(20), // token name (device identifier)
|
|
['*'], // abilities
|
|
now()->addYear() // expiration
|
|
);
|
|
|
|
// Format token: remove ID prefix and add Bearer
|
|
$tokenParts = explode('|', $token->plainTextToken);
|
|
$formattedToken = 'Bearer ' . ($tokenParts[1] ?? $tokenParts[0]);
|
|
|
|
return [
|
|
'auth_data' => $formattedToken,
|
|
'is_admin' => $this->user->is_admin,
|
|
];
|
|
}
|
|
|
|
public function getSessions(): array
|
|
{
|
|
return $this->user->tokens()->get()->toArray();
|
|
}
|
|
|
|
public function removeSession(): bool
|
|
{
|
|
$this->user->tokens()->delete();
|
|
return true;
|
|
}
|
|
|
|
public static function findUserByBearerToken(string $bearerToken): ?User
|
|
{
|
|
$token = str_replace('Bearer ', '', $bearerToken);
|
|
|
|
$accessToken = PersonalAccessToken::findToken($token);
|
|
|
|
return $accessToken?->tokenable;
|
|
}
|
|
}
|