setClientId(env('socket.google.client.id')); $this->setClientSecret(env('socket.google.client.key')); $this->setRedirectUri(base_url(env('socket.google.client.callback_url'))); $this->addScope(Oauth2::USERINFO_EMAIL); $this->addScope(Oauth2::USERINFO_PROFILE); // $this->setPrompt('select_account consent'); // $this->setAccessType('offline'); // SSL 검증 비활성화 $this->setHttpClient(new \GuzzleHttp\Client(['verify' => false])); // 사용자 정의 CA 번들 사용 // $this->setHttpClient(new \GuzzleHttp\Client(['verify' => '/path/to/cacert.pem'])); $this->session = Services::session(); } public function setToken(string $access_code): void { // 토큰 정보 가져오기 $tokenInfo = $this->fetchAccessTokenWithAuthCode($access_code); if (isset($tokenInfo['error'])) { throw new ConfigException($tokenInfo['error']); } // dd($tokenInfo); $this->_access_token = $tokenInfo[$this->_token_name]; // Google Service에 접근하기 위해 Access Token 설정 $this->setAccessToken([ 'access_token' => $this->_access_token, 'expires_in' => 3600, 'created' => time(), ]); // 세션에 Token 값 설정 $this->session->set($this->_token_name, $this->_access_token); } public function getToken(): string { return $this->session->get($this->_token_name); } public function isAccessTokenValid(): bool { // 액세스 토큰이 없으면 유효하지 않음 if (empty($this->getAccessToken())) { return false; } // 토큰의 만료 시간 확인 $expirationTime = $this->getTokenExpirationTime(); if ($expirationTime === null) { return false; } // 현재 시간과 비교하여 유효성 확인 return $expirationTime > time(); } private function getTokenExpirationTime(): ?int { // 토큰 정보 디코딩 $tokenParts = explode('.', $this->getToken()); if (count($tokenParts) !== 3) { return null; } $payload = json_decode(base64_decode($tokenParts[1]), true); if (!isset($payload['exp'])) { return null; } return $payload['exp']; } }