KCP 창업 지원, 수수료 국내최저 2.9% 제공 이벤트!

깃허브 소셜로그인 오류?

그누보드5
영카트5
스터디
Q & A
제작의뢰
컨텐츠몰
부가서비스
소모임
커뮤니티
부가서비스
신용카드 2.9%
깃허브 소셜로그인 오류?

QA

깃허브 소셜로그인 오류?

본문

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

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

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

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

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

 

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


<?php
/*!
* HybridAuth
* http://hybridauth.sourceforge.net | https://github.com/hybridauth/hybridauth
*  (c) 2009-2011 HybridAuth authors | hybridauth.sourceforge.net/licenses.html
*/
 
/**
 * Hybrid_Providers_GitHub
 */
class Hybrid_Providers_GitHub extends Hybrid_Provider_Model_OAuth2
{
    // default permissions
    // (no scope) => public read-only access (includes public user profile info, public repo info, and gists).
    public $scope = "user";
 
    /**
    * IDp wrappers initializer
    */
    function initialize()
    {
        parent::initialize();
 
        // Provider api end-points
        $this->api->api_base_url  = "https://api.github.com/";
        $this->api->authorize_url = "https://github.com/login/oauth/authorize";
        $this->api->token_url     = "https://github.com/login/oauth/access_token";
    }
 
    /**
    * load the user profile from the IDp api client
    */
    function getUserProfile()
    {
        $data = $this->api->api( "user" );
 
        if ( ! isset( $data->id ) ){
            throw new Exception( "User profile request failed! {$this->providerId} returned an invalid response.", 6 );
        }
 
        $this->user->profile->identifier  = @ $data->id;
        $this->user->profile->displayName = @ $data->name;
        $this->user->profile->description = @ $data->bio;
        $this->user->profile->photoURL    = @ $data->avatar_url;
        $this->user->profile->profileURL  = @ $data->html_url;
        $this->user->profile->email       = @ $data->email;
        $this->user->profile->webSiteURL  = @ $data->blog;
        $this->user->profile->region      = @ $data->location;
 
        if( empty($this->user->profile->displayName) ){
            $this->user->profile->displayName = @ $data->login;
        }
 
        // request user emails from github api
        if( empty($data->email) ){
            try{
                $emails = $this->api->api("user/emails");
 
                // fail gracefully, and let apps collect the email if not present
                if (is_array($emails)) {
                    foreach ($emails as $email) {
                        if ($email instanceof stdClass
                            && property_exists($email, 'primary')
                            && true === $email->primary
                            && property_exists($email, 'email')
                        ) {
                            $this->user->profile->email = $email->email;
 
                            // record whether the email address is verified
                            if (property_exists($email, 'verified')
                                && true === $email->verified
                            ) {
                                $this->user->profile->emailVerified = $email->email;
                            }
 
                            break;
                        }
                    }
                }
            }
            catch( GithubApiException $e ){
                throw new Exception( "User email request failed! {$this->providerId} returned an error: $e", 6 );
            }
        }
 
        $this->user->profile->sid = get_social_convert_id( $this->user->profile->identifier, $this->providerId );
 
        return $this->user->profile;
    }
    /**
    *
    */
    function getUserContacts() {
        // refresh tokens if needed
        $this->refreshToken();
 
        //
        $response = array();
        $contacts = array();
        try {
            $response = $this->api->api( "user/followers" );
        } catch (Exception $e) {
            throw new Exception("User contacts request failed! {$this->providerId} returned an error: $e");
        }
        //
        if ( isset( $response ) ) {
            foreach ($response as $contact) {
                try {
                    $contactInfo = $this->api->api( "users/".$contact->login );
                } catch (Exception $e) {
                    throw new Exception("Contact info request failed for user {$contact->login}! {$this->providerId} returned an error: $e");
                }
                //
                $uc = new Hybrid_User_Contact();
                //
                $uc->identifier     = $contact->id;
                $uc->profileURL     = @$contact->html_url;
                $uc->webSiteURL     = @$contact->blog;
                $uc->photoURL       = @$contact->avatar_url;
                $uc->displayName    = ( isset( $contactInfo->name )?( $contactInfo->name ):( $contact->login ) );
                //$uc->description  = ;
                $uc->email          = @$contactInfo->email;
                //
                $contacts[] = $uc;
            }
        }
        return $contacts;
    }
}
 
이 글을 내 페이스북 계정으로 보내기 이 글을 내 트위터 계정으로 보내기

이 질문에 댓글 쓰기 :

답변을 작성하시기 전에 로그인 해주세요.
전체 91,708 | RSS
고마운 분의 도움으로 질문을 해결하셨다면, 채택을 눌러서 감사의 마음을 전하세요.
어떻게 질문해야 할지 모른다면 질문하는 방법을 읽어 보신후 질문해 보세요.
QA 내용 검색

회원로그인

(주)에스아이알소프트 (06212) 서울시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 대표메일:admin@sir.kr
사업자등록번호:217-81-36347 대표:홍석명 통신판매업신고번호:2014-서울강남-02098호 개인정보보호책임자:이총

© SIRSOFT