validate([ 'username' => 'required|string', 'password' => 'required|string', ]); $token = Auth::guard('admins-api')->attempt($request->only('username', 'password')); if (!$token) { return response()->json([ 'error' => true, 'message' => 'Thông tin đăng nhập không chính xác.', ], 401); } $user = Auth::guard('admins-api')->user(); return response()->json([ 'error' => false, 'data' => [ 'token' => $token, 'token_type' => 'bearer', 'expires_in' => config('jwt.ttl') * 60, 'user' => new AdminUserResource($user), ], ]); } public function me(): JsonResponse { $user = Auth::guard('admins-api')->user(); return response()->json([ 'error' => false, 'data' => ['user' => new AdminUserResource($user)], ]); } public function refresh(): JsonResponse { try { $newToken = JWTAuth::parseToken()->refresh(); $user = JWTAuth::setToken($newToken)->toUser(); return response()->json([ 'error' => false, 'data' => [ 'token' => $newToken, 'token_type' => 'bearer', 'expires_in' => config('jwt.ttl') * 60, 'user' => new AdminUserResource($user), ], ]); } catch (JWTException) { return response()->json([ 'error' => true, 'message' => 'Không thể làm mới phiên đăng nhập. Vui lòng đăng nhập lại.', ], 401); } } public function logout(): JsonResponse { Auth::guard('admins-api')->logout(); return response()->json([ 'error' => false, 'message' => 'Đã đăng xuất thành công.', ]); } }