setRequest($request); $path = trim($request->path(), '/'); $parts = explode('/', $path); $action = $parts[array_key_last($parts)] ?? ''; $needAuthToken = !action_in_arr($this->noNeedAuthToken, $action); $authToken = ''; if ($needAuthToken) { $authToken = trim((string) $request->header('auth-token', '')); if ($authToken === '') { return $this->mobileError(1101, 'Missing auth-token'); } $tokenData = Token::get($authToken); $type = $tokenData['type'] ?? ''; $expireTime = $tokenData['expire_time'] ?? 0; if ($type !== 'auth-token' || !is_numeric($expireTime) || $expireTime < time()) { return $this->mobileError(1101, 'auth-token is invalid or expired'); } } $response = $this->initializeFrontend($request); if ($response !== null) { return $response; } $needLogin = !action_in_arr($this->noNeedLogin, $action); if ($needAuthToken && $needLogin && $this->auth->isLogin()) { $deviceError = MobileAuthDeviceService::validateUserDeviceSession($authToken, (int) $this->auth->id); if ($deviceError !== null) { return $this->mobileError(1101, $deviceError); } } return null; } protected function mobileSuccess(array $data = [], string $message = 'ok'): Response { if ($message === '') { $message = __('ok'); } else { $message = __($message); } $payload = [ 'code' => 1, 'message' => $message, 'data' => $data, ]; return response(json_encode($payload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), 200, ['Content-Type' => 'application/json']); } protected function mobileError(int $code, string $message, array $data = []): Response { $payload = [ 'code' => $code, 'message' => __($message), 'data' => $data, ]; return response(json_encode($payload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), 200, ['Content-Type' => 'application/json']); } }