테스트 사이트 - 개발 중인 베타 버전입니다

깃허브 소셜로그인 오류? 채택완료

akworjs0517 5년 전 조회 3,671

깃허브 소셜로그인을 했을때 세션에 access_token 이 저장될때도 있고 저장이 안될때도 있습니다.

저장이 될때는 HA::STORE 에 저장이되는데 이마저도 access_token 만 저장이되고 나머지

refresh_token, expires_in, expires_at 은 저장이 안됩니다.

로그인을 성공했으면 이제 access_token 을 가지고 다른 API 들을 호출해야되는데 저장이 안되네요...

그리고 관리자는 소셜로그인을 연동해도 access_token이 세션에 저장되지않게 되어있나요?

 

- /html/plugin/social/Hybrid/Providers/Github.php

</p>

<p><?php</p>

<p>/*!</p>

<p>* HybridAuth</p>

<p>* <a href="http://hybridauth.sourceforge.net | https://github.com/hybridauth/hybridauth" target="_blank" rel="noopener noreferrer">http://hybridauth.sourceforge.net | https://github.com/hybridauth/hybridauth</a></p>

<p>*  (c) 2009-2011 HybridAuth authors | hybridauth.sourceforge.net/licenses.html</p>

<p>*/</p>

<p> </p>

<p>/**</p>

<p> * Hybrid_Providers_GitHub</p>

<p> */</p>

<p>class Hybrid_Providers_GitHub extends Hybrid_Provider_Model_OAuth2</p>

<p>{</p>

<p>    // default permissions</p>

<p>    // (no scope) => public read-only access (includes public user profile info, public repo info, and gists).</p>

<p>    public $scope = "user";</p>

<p> </p>

<p>    /**</p>

<p>    * IDp wrappers initializer</p>

<p>    */</p>

<p>    function initialize()</p>

<p>    {</p>

<p>        parent::initialize();</p>

<p> </p>

<p>        // Provider api end-points</p>

<p>        $this->api->api_base_url  = "<a href="https://api.github.com/";" target="_blank" rel="noopener noreferrer">https://api.github.com/";</a></p>

<p>        $this->api->authorize_url = "<a href="https://github.com/login/oauth/authorize";" target="_blank" rel="noopener noreferrer">https://github.com/login/oauth/authorize";</a></p>

<p>        $this->api->token_url     = "<a href="https://github.com/login/oauth/access_token";" target="_blank" rel="noopener noreferrer">https://github.com/login/oauth/access_token";</a></p>

<p>    }</p>

<p> </p>

<p>    /**</p>

<p>    * load the user profile from the IDp api client</p>

<p>    */</p>

<p>    function getUserProfile()</p>

<p>    {</p>

<p>        $data = $this->api->api( "user" );</p>

<p> </p>

<p>        if ( ! isset( $data->id ) ){</p>

<p>            throw new Exception( "User profile request failed! {$this->providerId} returned an invalid response.", 6 );</p>

<p>        }</p>

<p> </p>

<p>        $this->user->profile->identifier  = @ $data->id;</p>

<p>        $this->user->profile->displayName = @ $data->name;</p>

<p>        $this->user->profile->description = @ $data->bio;</p>

<p>        $this->user->profile->photoURL    = @ $data->avatar_url;</p>

<p>        $this->user->profile->profileURL  = @ $data->html_url;</p>

<p>        $this->user->profile->email       = @ $data->email;</p>

<p>        $this->user->profile->webSiteURL  = @ $data->blog;</p>

<p>        $this->user->profile->region      = @ $data->location;</p>

<p> </p>

<p>        if( empty($this->user->profile->displayName) ){</p>

<p>            $this->user->profile->displayName = @ $data->login;</p>

<p>        }</p>

<p> </p>

<p>        // request user emails from github api</p>

<p>        if( empty($data->email) ){</p>

<p>            try{</p>

<p>                $emails = $this->api->api("user/emails");</p>

<p> </p>

<p>                // fail gracefully, and let apps collect the email if not present</p>

<p>                if (is_array($emails)) {</p>

<p>                    foreach ($emails as $email) {</p>

<p>                        if ($email instanceof stdClass</p>

<p>                            && property_exists($email, 'primary')</p>

<p>                            && true === $email->primary</p>

<p>                            && property_exists($email, 'email')</p>

<p>                        ) {</p>

<p>                            $this->user->profile->email = $email->email;</p>

<p> </p>

<p>                            // record whether the email address is verified</p>

<p>                            if (property_exists($email, 'verified')</p>

<p>                                && true === $email->verified</p>

<p>                            ) {</p>

<p>                                $this->user->profile->emailVerified = $email->email;</p>

<p>                            }</p>

<p> </p>

<p>                            break;</p>

<p>                        }</p>

<p>                    }</p>

<p>                }</p>

<p>            }</p>

<p>            catch( GithubApiException $e ){</p>

<p>                throw new Exception( "User email request failed! {$this->providerId} returned an error: $e", 6 );</p>

<p>            }</p>

<p>        }</p>

<p> </p>

<p>        $this->user->profile->sid = get_social_convert_id( $this->user->profile->identifier, $this->providerId );</p>

<p> </p>

<p>        return $this->user->profile;</p>

<p>    }</p>

<p>    /**</p>

<p>    *</p>

<p>    */</p>

<p>    function getUserContacts() {</p>

<p>        // refresh tokens if needed</p>

<p>        $this->refreshToken();</p>

<p> </p>

<p>        //</p>

<p>        $response = array();</p>

<p>        $contacts = array();</p>

<p>        try {</p>

<p>            $response = $this->api->api( "user/followers" );</p>

<p>        } catch (Exception $e) {</p>

<p>            throw new Exception("User contacts request failed! {$this->providerId} returned an error: $e");</p>

<p>        }</p>

<p>        //</p>

<p>        if ( isset( $response ) ) {</p>

<p>            foreach ($response as $contact) {</p>

<p>                try {</p>

<p>                    $contactInfo = $this->api->api( "users/".$contact->login );</p>

<p>                } catch (Exception $e) {</p>

<p>                    throw new Exception("Contact info request failed for user {$contact->login}! {$this->providerId} returned an error: $e");</p>

<p>                }</p>

<p>                //</p>

<p>                $uc = new Hybrid_User_Contact();</p>

<p>                //</p>

<p>                $uc->identifier     = $contact->id;</p>

<p>                $uc->profileURL     = @$contact->html_url;</p>

<p>                $uc->webSiteURL     = @$contact->blog;</p>

<p>                $uc->photoURL       = @$contact->avatar_url;</p>

<p>                $uc->displayName    = ( isset( $contactInfo->name )?( $contactInfo->name ):( $contact->login ) );</p>

<p>                //$uc->description  = ;</p>

<p>                $uc->email          = @$contactInfo->email;</p>

<p>                //</p>

<p>                $contacts[] = $uc;</p>

<p>            }</p>

<p>        }</p>

<p>        return $contacts;</p>

<p>    }</p>

<p>}</p>

<p> </p>

<p>

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인