94 lines
2.1 KiB
PHP
94 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Http\Requests\Auth\LoginRequest;
|
|
use App\Http\Requests\Auth\RegisterRequest;
|
|
use App\Models\User;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
|
|
class AuthController extends Controller
|
|
{
|
|
public function register(RegisterRequest $request): JsonResponse
|
|
{
|
|
$data = $request->validated();
|
|
|
|
$user = User::create([
|
|
'username' => $data['username'],
|
|
'email' => $data['email'],
|
|
'password' => $data['password'],
|
|
]);
|
|
|
|
$token = $user->createToken(
|
|
$this->resolveDeviceName($data)
|
|
)->plainTextToken;
|
|
|
|
return response()->json([
|
|
'token' => $token,
|
|
'token_type' => 'Bearer',
|
|
|
|
], Response::HTTP_CREATED);
|
|
}
|
|
|
|
public function login(LoginRequest $request): JsonResponse
|
|
{
|
|
$data = $request->validated();
|
|
|
|
$user = User::where('email', $data['email'])->first();
|
|
|
|
if (! $user || ! Hash::check($data['password'], $user->password)) {
|
|
throw ValidationException::withMessages([
|
|
'email' => [__('auth.failed')],
|
|
]);
|
|
}
|
|
|
|
$token = $user->createToken(
|
|
$this->resolveDeviceName($data)
|
|
)->plainTextToken;
|
|
|
|
return response()->json([
|
|
'token' => $token,
|
|
'token_type' => 'Bearer',
|
|
'user' => $user,
|
|
]);
|
|
}
|
|
|
|
public function me(Request $request): JsonResponse
|
|
{
|
|
return response()->json($request->user());
|
|
}
|
|
|
|
public function logout(Request $request): JsonResponse
|
|
{
|
|
$request->user()?->currentAccessToken()?->delete();
|
|
|
|
return response()->json([
|
|
'message' => __('auth.logout_success'),
|
|
]);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
* Determine the token name to use for the access token.
|
|
*
|
|
* @param array<string, mixed> $data
|
|
*/
|
|
private function resolveDeviceName(array $data): string
|
|
{
|
|
$deviceName = trim((string) ($data['device_name'] ?? ''));
|
|
|
|
return $deviceName !== '' ? $deviceName : 'api-token';
|
|
}
|
|
}
|