Extra Form
PHP PHP 7.4
CMS Rhymix 2.0

라이믹스로 업그레이드 하기전 xe 에서 사용하던 CONORY님의 소셜XE 모들 을 스케치북5 레이아웃을 조금씩 수정하며 사용하고 있습니다 .당시 레이아웃의 업그레이드 지원이 끊어진지 오래라 레이아웃 설정에 기본으로 있던 난다날아 님의 소셜 로그인 기능을 사용할수 없어서 xe 코어를  사용하던 당시 CONORY님의 소셜XE 모들 에 연동시켜 커스텀 했습니다

 

그런데 xe 에서는 트윗로그인 기능을 별다른 문제없이 커스텀하여 사용하고 있었는데 라이믹스로 업그레이드 한 이후 트윗 인증에서 서버오류가나네요 동일하게 사용하던 구글과 카카오톡 로그인 기능은 지원이 되고있습니다만 트윗만 서버오류가 나는 원인을 찾기가 힘들어서 도움을 부탁해요 

 

제가 xe 서 스케치북5 레이아웃의 소셜 로그인 기능을 CONORY님의 소셜XE 모들 을 커스텀한 내용들을 첨부 url사이트 페이지에 넣어놨는데 한번 살펴봐 주시고 원인에 대한  조언을 부탁 드립니다;;

 

 

 

*페이스북 로그인 기능은 프로필 인증을 변경 했더니

루트 /modules/socialxe/libs/facebook.lib.php

facebook.lib.php 수정 

// 프로필 인증 변경 

135 라인 기존 내용 주석 처리

//$this->setVerified($profile['verified']);

내용변경  입력 

$this->setVerified(teue);

 

이후 소셜 로그인 설정과 로그인 창 설정에 페이스북 로그인 사용으로  설정 적용한후 경고메일이 오더군요 

 

이 부분이야 xe 코어를 사용하던 당시도 있던 오류라 이해가 가는데  이 부분 말고는 라이믹스 업그레이드 이후 

 트윗만 서버 오류가 유독 나는 이유룰 모르겠습니다 

  • profile
    1. 소셜xe에 적용된 트위터 라이브러리버전이 구버전입니다.
    2. 신버전을 사용하면 내부 twitter.lib.php 파일의 내용도 같이 수정되어야 합니다.

    수정 사항이 좀 많이 있어서 글로써는 답변이 힘들겟지만 위의 두가지가 주범이라 생각하시면 되겠습니다.

    페북쪽에 $this->setVerified(teue); 이라고 하셨는데 $this->setVerified(true); 가 맞지 않나요?
  • profile profile

    아 그런가요? 페북쪽은 제가 오타를 적은것 같기도하고 한번 페북쪽도 다시한번 살펴봐야겠어요;;;가뭄에 단비처럼 힌트를 주셔서 정말 감사합니다 람보님 ㅠㅜ
    트윗은 여기 질답 글 중에 힌트를 얻어서
    https://xetown.com/topics/1368913
    글 내용처럼 콜백 url로 리렉션 링크로 php 파일을 루트에 넣었는데도 안돼더라구요

    <?php
    header('Locatin: https://hothoney.co.kr/index.php?module=socialxe&act=procSocialxeCallback&service=twitter
    ',true,301);

    트윗 디벨로프가 완전히 바뀐건지 에전에 만든 소셜로그인 api 기값도 앱이 없다고 나오길래 다시 가입하고 만들어 넣어도 안돼더군요;;일단 한번 다시 살펴보겠습니다

  • profile profile

    페이스북은 어쩻던
    //$this->setVerified($profile['verified']);
    코드를 주석처리하고
    $this->setVerified(true);
    코드로 바꾸면 로그인은 되요 근데 사용하다 보면 페북에서 정책위반 어쩌고 경고가오고 수정하라고 메일이 오더군요;;
    이건 예전에 xe 부터 있던 일이라 아마 제가 페북 로그인 신청할때 패북쪽 앱 설정 권한쪽에 문제가 있는것 아닐까 생각중입니다.

     문제는 트윗의 소셜로그인 기능이 도데체 안되는 감을 못찼고 해매고 있습니다.트윗의 twitter.lib.php 파일의 어느부분을 수정해야 라는것일까요? 그리고 궁금한건 라이믹스 업그레이드 전 xe 코드에서는 사용되던 트윗로그인이 업그레이드후 바로 서버오류가 나오던 이유가 뭘까요?

  • profile profile
    지금 사용중인 twitter.lib.php 입니다 어느부분을 건드려 봐야할까요?

    <?php
    /**
    * @class libraryTwitter
    * @author CONORY (https://xe.conory.com)
    * @brief The twitter library of the socialxe module
    */

    require_once('modules/socialxe/libs/twitter/autoload.php');

    use Abraham\TwitterOAuth\TwitterOAuth;

    class libraryTwitter extends socialxeLibrary
    {
    /**
    * @brief 인증 URL 생성 (SNS 로그인 URL)
    */
    function createAuthUrl($type)
    {
    $connection = new TwitterOAuth($this->config->twitter_consumer_key, $this->config->twitter_consumer_secret);

    // API 요청 : 요청 토큰
    $request_token = $connection->oauth('oauth/request_token', array(
    'oauth_callback' => getNotEncodedFullUrl('', 'module', 'socialxe', 'act', 'procSocialxeCallback', 'service', 'twitter')
    ));

    // 세션에 토큰 저장 (인증 단계에서 사용하기 위하여)
    $_SESSION['socialxe_auth']['token'] = $request_token['oauth_token'];
    $_SESSION['socialxe_auth']['token_secret'] = $request_token['oauth_token_secret'];

    // API 요청 : 요청 토큰으로 인증 URL 생성
    return $connection->url('oauth/authenticate', array('oauth_token' => $_SESSION['socialxe_auth']['token']));
    }

    /**
    * @brief 인증 단계 (로그인 후 callback 처리) [실행 중단 에러를 출력할 수 있음]
    */
    function authenticate()
    {
    // 토큰 세션 체크
    if(!Context::get('oauth_verifier') || !$_SESSION['socialxe_auth']['token'] || !$_SESSION['socialxe_auth']['token_secret'])
    {
    return new BaseObject(-1, 'msg_invalid_request');
    }

    // 위변조 체크
    if(Context::get('oauth_token') !== $_SESSION['socialxe_auth']['token'])
    {
    return new BaseObject(-1, 'msg_invalid_request');
    }

    $connection = new TwitterOAuth($this->config->twitter_consumer_key, $this->config->twitter_consumer_secret, $_SESSION['socialxe_auth']['token'], $_SESSION['socialxe_auth']['token_secret']);

    // API 요청 : 엑세스 토큰
    $token = $connection->oauth('oauth/access_token', array('oauth_verifier' => Context::get('oauth_verifier')));

    // 토큰 삽입
    $this->setAccessToken(array('token' => $token['oauth_token'], 'token_secret' => $token['oauth_token_secret']));

    return new BaseObject();
    }

    /**
    * @brief 로딩 단계 (인증 후 프로필 처리) [실행 중단 에러를 출력할 수 있음]
    */
    function loading()
    {
    // 토큰 체크
    if(!$token = parent::getAccessToken())
    {
    return new BaseObject(-1, 'msg_errer_api_connect');
    }

    $connection = new TwitterOAuth($this->config->twitter_consumer_key, $this->config->twitter_consumer_secret, $token['token'], $token['token_secret']);

    // API 요청 : 프로필
    if(!($profile = $connection->get('account/verify_credentials', array('include_email' => 'true'))) || empty($profile))
    {
    return new BaseObject(-1, 'msg_errer_api_connect');
    }

    // 계정 차단 확인
    if($this->config->sns_suspended_account == 'Y')
    {
    // API 요청 : 사용자 정보
    if(!($user = $connection->get('users/show', array('user_id' => $profile['id']))) || !$user['id'])
    {
    return new BaseObject(-1, 'msg_sns_suspended_account');
    }
    }

    // 팔로워 수 제한
    if($this->config->sns_follower_count)
    {
    if($this->config->sns_follower_count > $profile['followers_count'])
    {
    $this->revokeToken();

    return new BaseObject(-1, sprintf(Context::getLang('msg_not_sns_follower_count'), $this->config->sns_follower_count));
    }
    }

    // 이메일 주소
    if($profile['email'])
    {
    $this->setEmail($profile['email']);
    }

    // ID, 이름, 프로필 이미지, 프로필 URL
    $this->setId($profile['id']);
    $this->setName($profile['name']);
    $this->setProfileImage($profile['profile_image_url']);
    $this->setProfileUrl('https://twitter.com/' . $profile['screen_name']);

    // 프로필 인증
    $this->setVerified(true);

    // 전체 데이터
    $this->setProfileEtc($profile);

    return new BaseObject();
    }

    /**
    * @brief 토큰 파기 (SNS 해제 또는 회원 삭제시 실행)
    */
    function revokeToken()
    {
    // 트위터의 경우 따로 파기할 수 없음
    }

    /**
    * @brief 토큰 새로고침 (로그인 지속이 되어 토큰 만료가 될 경우를 대비)
    */
    function refreshToken()
    {
    // 트위터의 경우 유효기간이 없는 무제한 토큰므로 필요없음
    }

    /**
    * @brief 연동 체크 (SNS 연동 설정 전 연동 가능 여부를 체크)
    */
    function checkLinkage()
    {
    // 트위터는 연동 가능
    return new BaseObject();
    }

    /**
    * @brief SNS로 전송 (연동)
    */
    function post($args)
    {
    // 토큰 체크
    if(!$token = parent::getAccessToken())
    {
    return;
    }

    $connection = new TwitterOAuth($this->config->twitter_consumer_key, $this->config->twitter_consumer_secret, $token['token'], $token['token_secret']);

    // API 요청 : 상태 업데이트 (제목 + 게시물 URL)
    $connection->post('statuses/update', array('status' => $args->title . ' ' . $args->url));
    }

    /**
    * @brief 프로필 확장 (가입시 추가 기입)
    */
    function getProfileExtend()
    {
    // 프로필 체크
    if(!$profile = $this->getProfileEtc())
    {
    return new stdClass;
    }

    $extend = new stdClass;

    // 서명 (자기 소개)
    if($profile['description'])
    {
    $extend->signature = $profile['description'];
    }

    // 홈페이지
    if($profile['entities']['url']['urls'][0]['expanded_url'])
    {
    $extend->homepage = $profile['entities']['url']['urls'][0]['expanded_url'];
    }

    return $extend;
    }

    /**
    * @brief 두개의 토큰에 대한 배열 처리
    */
    function setAccessToken($access_token)
    {
    // 배열이 아닌 json 가 삽입 되었을 경우 배열로 변환하여 처리
    if(!is_array($access_token))
    {
    $access_token = json_decode($access_token, true);
    }

    parent::setAccessToken($access_token);
    }

    /**
    * @brief 두개의 토큰에 대한 배열 처리
    */
    function getAccessToken()
    {
    // 빼낼 경우 json 로 변환하여 반환
    return json_encode(parent::getAccessToken());
    }

    function getProfileImage()
    {
    // 최대한 큰 사이즈의 프로필 이미지를 반환하기 위하여
    return str_replace('_normal', '', parent::getProfileImage());
    }
    }
  • profile profile
    디버깅도하고 라이브러리 어떻게 되어있는지도 봐야하고..
    코드만 딸랑 주신다고 해서 제가 질문을 해결드릴 수 있는건 아닙니다..

    말씀드린것 처럼 한곳만 수정해서는 안될 수 있기 때문에 다양하게 디버깅 해봐야 하므로 거의 제작에 가까운 작업이 들어갑니다.
  • profile profile
    ^^너무 감사합니다 이것저것 조언 주신 부분들 어쩻던 많은 참고가 됬어요 람보님
  • profile

    라이믹스 2.1부터 소셜로그인 기능이 기본 기능으로 변경될 예정입니다.
    기존 소셜로그인 모듈의 설정을 가져오는것도 가능하고요.

    트위터 사용시 PHP 7.3 이상이 필요하긴 하지만 7.4 사용중이라 문제는 없으실것같고 해당 코드는 라이믹스 next 브랜치에 있으니 한번 시도해보시는것도 나쁘진 않을것 같습니다. 다만 다시 원상복구해야 할수 있으니 적용전 파일/DB 백업후 적용해주세요.

  • profile profile
    소개 감사합니다 :) :+1:
  • profile profile
    감사해요 와이제이 소프트님 조언 감사드려요 ^^
  • profile profile
    트위터 로그인 과정을 추적해보니 로그인이 다되어 넘어갔다가 로그인 정보가 서버로 넘어오는 과정에서 오류가 발생하는것으로 보아 제 좁은 추측으로는 트윗에 패킷등 넘어가는 정보가 문제가 아니라 왠지 라이믹스와 그전 xe의 로그인 정보 처리 과정에서의 뭔가 변경된 방식의 처리문제가 아닌가 추측해보고 있습니다 직전에 xe에서는 로그인 정보처리가 넘어았던것으로 봐도 그렇구요 로그인 처리과정에서 xe와 라이믹스의 처리방법의 차이가 먼지 한번 고민해 봐야겠어요 ^^;
  • profile profile
    쫄보라 일단2.1업그레이드를 기대해보고 현사용은 그럭저럭 수정해가며 버텨봐야겠어요 ^^
  • profile ?
    혹시 라이믹스2.x + 기존 소셜SNS 모듈 사용 시 아래와 같은 문제가 발생하지 않으신가요?
    https://xetown.com/questions/1688210
  • ? profile
    글쎄요 저는 네이버 로그인 사용시에는 약관동의(네이버 로그인 진행화면) 이후 서버 오류가 나서 사용을 않해서요 소셜xe 기능들이 조회해보면 설치환경에 따라서 여러 증상들이 따로따로 인것 같습니다 어떤분은 구글이 안되고 저같은 경우는 트윗과 네입이 안되고;; 전 라이믹스용이 아닌 conory 님의 xe 모들에서 바로 라이믹스로 업그레이드 한것이고 어떤분들은 라이믹스 용으로 커스텀된 모들 환경을 받은것이고의 차이인지 아니면 각각 사용자의 서버 환경인지;; 이유는 할수가 없더라구요....
    혹시 이 부분도 한번 살펴보세요 라이믹스에서 기존xe 에서는분리되어 사용되던 모들들이 따로 라이믹스로 통합되어사용 되는 모들의 변경 부분이 있던데 예를들어 회원 정보보기의 자동로그인 관리 라던가 작성 댓글보기가 전 스케치북5 레이아웃의 맴버 스킨에서 변경되어 라이믹스의 기본 디폴트 맴보스킨에서 따로 복사해 넣어주고 기능을 회복한 부분이 있는데 이런식으로 모들의 환경이 변경된것 때문이 아닐까요?

    (EX : https://hothoney.co.kr/site_files/10343)
  • profile ?
    저는 네이버 로그인만 이용중인데 서버오류는 없고 윗부분에 언급한 문제가 발생하더군요.
    어쩔수 없이 2.1출시될때까지 기다려봐야 할 것 같습니다.
    답변 감사합니다. ^^