커뮤니티토픽게시판

구글 아이디로 로그인을 거의 포기했었는데요. https://xetown.com/1368913

... 그 이후에 구글 쪽에 앱 게시 허용 요청 보내고 몇 차례 빠꾸 먹고 겨우 허용을 얻고 그랬는데도 안 되더라구요. 털썩...

그러다 좀 전에 질답게시판에 소셜XE 이야기가 나오기도 해서, 이 참에 진지하게 처음부터 하는 기분으로 다시 시도를 해봤습니다.

... 결과는 아직 성공적입니다. (이후에 또 어떻게 될지 몰라서ㅜ)

암튼 구아로ㅋ 때문에 고생하시는 분들께 도움이 될지 몰라 정리를 다시 해봅니다.

 

1. 구글 개발자 콘솔에서 '사용자 인증 정보'와 'OAuth 동의 화면'이 모두 잘 설정됐다는 전제입니다.

 

2. rixx님의 패치는 기본입니다. 이거 설치했구요. https://xetown.com/1196345

 

3. 제 경우에는 그럼에도 불구하고 "API 통신 오류입니다. 재시도 해주세요."라는 메시지와 함께 관련 오류가 계속 발생했어요.

 

4. 그래서 ./modules/socialxe/libs 에 있는 google.lib.php 파일을 열어서 해당 문구가 나오는 부분을 찾아봤어요. 'msg_errer_api_connect' 라는 부분입니다. (제작자님 오타가ㅠ)

 

5. 그래서 이 부분의 메시지를 조금씩 조정해봤더니 if(empty($profile)) 이 부분에서 막힌 거였더라구요. 프로필을 못 가져온다는 이야기겠죠? 그래서 검색을 했죠.

 

6. 그랬더니 'https://www.googleapis.com/plus/v1/people/me' 라는 부분을 'https://www.googleapis.com/userinfo/v2/me' 로 바꿔줘야 한다는 의견들이 많더라구요. 역시 스택오버플로우 짜응~

 

7. google.lib.php를 다시 열었습니다.

const GOOGLE_PEOPLE_URI = 'https://www.googleapis.com/plus/v1/people/';

라는 부분이 있더라구요. 안 그래도 이게 좀 찜찜했었어요. 왜냐면 아까 프로필 가져오는 부분에서부터

$profile = $this->requestAPI(GOOGLE_PEOPLE_URI . 'me?' . http_build_query(array(
    'access_token' => $this->getAccessToken(),
), '', '&'));

GOOGLE_PEOPLE_URI가 계속 마음에 걸렸었거든요.

그래서 문제의 9행을 다음과 같이 바꿨습니다.

const GOOGLE_PEOPLE_URI = 'https://www.googleapis.com/userinfo/v2/';

 

8. 그리고 '회원 메뉴'의 'SNS 관리'로 들어가 구글 계정 연결을 재시도해봤습니다. 그랬더니... 해결될 줄 알았죠? ㅋㅋㅋ 이번에는 'name값은 필수입니다'라는 오류 메시지가 뙇!!

 

9. 어쨌든 이건 프로필은 가져오는데 거기서 name값이 누락된다는 이야기 아니겠습니까? 그래서 다시 google.lib.php를 열었습니다.

$this->setName($profile['displayName']);

분명 name 설정해주는 부분이잖아요? 'displayName'은 아무래도 예전 로그인 방식에서 가져오는 프로필 속성 같더군요. 그래서 더 알아보기 전에 일단 시험이나 해봐야겠다는 생각으로 name이라는 글자를 넣어봤습니다.

$this->setName($profile['name']);

 

10. 그리고 다시 계정 연결을 시도했습니다. 그랬더니... 하늘색 배경의 성공 메시지가 떴습니다. 'SNS 계정 등록을 완료했습니다.' 이제는 등록 해제하고 다시 등록해도 잘 되고, 다시 등록한 뒤 로그아웃하고 구글 아이디로 로그인해봐도 잘 됩니다.

 

11(덧). 추가 확인 결과, 위에서처럼 GOOGLE_PEOPLE_URI 정의를 바꾸게 되면 이메일을 받아오는 부분도 바뀌어야 합니다.

// 이메일 주소
if($profile['emails'])
{
    foreach($profile['emails'] as $key => $val)
    {
        if($val['type'] == 'account' && $val['value'])
        {
            $this->setEmail($val['value']);

            break;
        }
    }
}

디버그를 해보니 역시 예전 방식과 다르게 이제는 $profile이 다음과 같이 구성되어 있기 때문에 구글 계정에서 이메일을 가져오지 못했습니다.

Array
(
    [id] => ~~~~
    [email] => [email protected]
    [verified_email] => 1
    [name] => 윤삼
    [given_name] => 삼
    [family_name] => 윤
    [picture] => https://~~~~/photo.jpg
    [locale] => ko
)

이렇게요.

따라서 위에 나와 있던 코드를 다음과 같이 통째로 바꿔주니까 별 문제 없이 작동하는 것 같습니다.

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

 

 

12(덧). 11번 항목 바로 아래에 보면 다음과 같은 코드가 있는데요.

// ID, 이름, 프로필 이미지, 프로필 URL
$this->setId($profile['id']);
$this->setName($profile['name']);
$this->setProfileImage($profile['image']['url']);
$this->setProfileUrl($profile['url']);

위에서 바뀐 소스를 기준으로 하면, 100행부터가 됩니다. 여기서 세 번째에 해당하는  $this->setProfileImage($profile['image']['url']);  을 다음과 같이 바꾸면 프로필 이미지를 가져오는 것도 가능해집니다.

$this->setProfileImage($profile['picture']);

... 그리고 104행의 $this->setProfileUrl($profile['url']); 은 쓸모가 없어졌으니 지워도 무방하겠구요.

글쓴이 윤삼

profile
사물이 거울에 보이는 것보다 가까이 있음
  • profile
    그동안 맘써주신 영흥도우럭님, 롱블랙님, 그리고 GG님 감사합니다ㅜ
    그리고 @spire님 참고해보세요. 부디 잘 되시길~
  • profile
    구글 api 스팩이 바뀌었군요 ㅎ
  • profile profile
    구글에 문제가 있어 구글링을 했더니 답이 나옵니다ㅋ
  • profile
    수정해야 할 부분이 계속 쌓이고 있는 모양인데
    이미 무료 모듈이긴 하지만, 재배포가 가능한 오픈소스 라이선스로 풀려서
    이런 수정내역들이 반영된 버전을 쉽게 구할 수 있으면 좋겠네요.
  • profile profile
    Beerware 라이선스면 어떻게 되는 건가요?
  • profile profile
    맥주 한 잔 사드리면서 말씀해 보세요. ㅋㅋㅋ
  • profile profile
    이젠 후원 도우미 애드온도 작동을 안 해서 맥주 한 잔을 못 사드려요ㅋㅋㅋ
  • profile

    감사합니다. 저도 거의 포기중이었는데, 프로필을 못가져오는것까지는 이전에 확인했었는데 적용해보니,
    API오류는 안나고 일단 통과가 되긴 하는데, 
    구글계정에 이메일이 없다하고 이메일 인증하게 이메일 입력을 하라고 하는데 이메일을 입력하니 name값은 필수입니다가 나오네요.... 어쨌든 이건 해결이 쉬워 보입니다. 한동안 골머리 썩던거라 감사합니다. 

  • profile profile

    거긴 또 이메일까지... 좋은 소식 있으면 꼭 알려주세요~

  • profile profile

    이메일을 입력하고 인증메일 발송 후 메일함에서 클릭하면 로그인이 되긴 됩니다.
    단지, 구글 계정에 로그인할때 이메일이 버젓이 써있는데, 없다고 하니 수상한 사이트처럼 보여서 한번 살펴봐야겠네요.... 여러가지 구글계정으로 해봐도 같은 증상이네요....
    저는 사이트에 아이디를 사용하지 않고, 이메일과 비번만으로 가입을 하는데,
    아무래도 이메일을 못받아오는 모양인것 같습니다.

    다른 사이트를 오늘안에 만들어야되는데, 갑자기 또 이걸 파고 있네요^^

  • profile profile
    으윽 그 상황 완전 이해됩니다. 일단 접으시고 하셔야 하는 일부터 끝내세요. 안 그러면 저처럼 일 완전 밀립니다ㅠㅠ
  • profile profile

    저도 방금 메일 인증 방식으로 바꾸면서 회원가입 시도해봤더니 수동으로 이메일 주소를 입력하라고 하네요.
    아마도 97행에서 이메일을 받아오는 데 실패하는 게 아닌가 싶어요.

    // 이메일 주소
    if($profile['emails'])
    {
        foreach($profile['emails'] as $key => $val)
        {
            if($val['type'] == 'account' && $val['value'])
            {
                $this->setEmail($val['value']);
    
                break;
            }
        }
    }

     

    그래서 디버그를 해보니 역시 예전 방식과 다르게 이제는 

    $profile은 다음과 같이 구성되어 있습니다.

    Array
    (
        [id] => ~~~~
        [email] => [email protected]
        [verified_email] => 1
        [name] => 윤삼
        [given_name] => 삼
        [family_name] => 윤
        [picture] => https://~~~~/photo.jpg
        [locale] => ko
    )

    이렇게요.

    따라서 위에 나와 있던 코드를 다음과 같이 통째로 바꿔주니까 별 문제 없이 작동하는 것 같습니다.

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

     

    이제 시름 덜어내시고 사이트 제작 고고!!

  • profile profile
    저도 구글링 다시 뒤져보고, 해결법을 찾고나서 다시 들어와보니 먼저 찾으셨네요^^
    구글플러스때는 이메일이 없을 수가 있는데 구글계정에는 이메일이 없을수가 없으니까요....
    이거 정말 오래동안 씨름하다가 그냥 포기했던건데.... 생각보다 쉽게 해결이 되었습니다.
    감사합니다.^^
  • ?
    덕분에 저도 구글 로그인 다시 연동시켰네요. 감사합니다.
  • ? profile
    오오 그럼 헛 정보만은 아닌 거죠? 다행입니다~
  • profile ?
    아주 유용한 정보입니다. ^^ 개인적으로 사이트 운영에 네이버, 구글, 카카오톡 3개 정도 셋팅되면 양호하다고 생각하고 있는데 3개다 잘되어서 좋네요.
    주말 잘보내시구요. ^^
  • ? profile
    본문에서 11번 이메일 수정 사항 부분도 추가했으니 확인해보세요.
    주말이 이제 몇 시간 안 남았...ㅠㅠㅠ
  • profile ?
    네..해당부분도 수정했습니다. 감사합니다. ^^
  • profile
    이게 또 지금 배포되어있는 상태는 예전 구글플러스 로고에서 플러스만 지운 형태인데, 요즘에는 구글이 빨강파랑노랑초록색의 대문자 G형태로 로고가 바뀌어서 구글로그인 버튼 양식도 바뀌었더라고요....
    로그인이 되는김에 이걸 수정하고 있습니다.
    거듭 감사합니다.
  • profile profile

    그렇겠군요.  https://developers.google.com/identity/branding-guidelines?hl=ko

     

    rixx님 패치에 이렇게 로고 패치까지 있기는 한데, 어차피 저도 실사용은 comely socialXE skin을 쓰고 있어서 수정을 해보긴 해야겠네요.

    0.png

  • profile profile
    토탈로그인에서 CSS를 또 바꿔서 썼더니, 저 안에 들어있는 기본 스킨을 보지 못했네요...

    저도 처음에 저렇게 흰색으로 수정을 했다가 흰색 바탕이 뭔가 마음에 안들어서 그냥 옅은 회색바탕으로 했습니다.
    대신 문구는 구글에서 시키는대로 'Sign In with Google'로 했네요...^^
  • profile
    훌륭하십니다 저도 트위터는 성공했어요. 다음에는 요 팁 보고 구글한번 해봐야겠네용
  • profile profile
    결국 성공하셨군요. 다행입니다. 구글도 꼭 성공하세요!!
  • profile profile

    구글은 작년11월에 신청만 해.두고 사용을 안했는데 지금 해보니 그냥 되네요 .. 따로 파일 수정은 안했어요

  • profile profile
    왜 누구는 그냥 되고 누구는 수정을 해야 되는거죠..... 이유가 궁금하다기보단 억울할뿐^^
  • profile profile
    제 말이 그 말입니다 ㅡㅡ;;;
  • profile
    아 로그인 까진 되었는데 프로필사진과 이름이 적용되지가 않네요 ㅠㅠ
  • profile profile
    $this->setProfileImage($profile['image']['url']);
    라는 부분이 있을텐데 이걸
    $this->setProfileImage($profile['picture']);
    으로 바꿔보시겠어요?
    직접 해본 것은 아니어서 모르겠는데 해보고 말씀주시면 좋겠습니다.
  • profile profile

    아아 성공 했습니다. 알려 주신 대로 하니 페이지가 뜨지 않았는데 뒤에 ['url']);
    붙이니까 정상 적으로 작동하고 보이네요. 고맙습니다. 윤삼님^^

    그리고 혹시

    로그인 이라 되어있는 문구를
    sns 로그인 이라고 수정할 순 없을까요?
    그래야 명확하게 사용자가 바로 로그인 할 수 있을 거 같아서요^^

  • profile profile
    $this->setProfileImage($profile['picture']['url']);
    으로 하신 거란 말씀이죠? 음... 왜 그렇게 되는 걸까요...

    문구 수정은 어느 부분을 할 것인지, 사이트 전체에서 할 것인지 등에 따라 방법이 다양할 수 있어요.
    $lang 변수를 수정하는 것이 일반적인데, 스킨단에서 바꿀 수도 있겠구요.
  • profile profile

    아 제가 착각했네요.ㅠ 프로필 사진이 불러 들려 지지 않습니다.

    로그인 바꾸는 거
    어느 파일인지 찾아 보겠습니다.^^

     

  • profile profile

    $this->setProfileImage($profile['picture']); 로 바꾸니까 아래 그림처럼 저는 잘 가져오는데요.

    00.png

    기존 계정에 구글계정 추가할 때는 이미지 가져오는 게 안 되지만, 신규가입할 때는 잘 됩니다.

  • profile profile
    네 다시 수정해 보니 사진 가져와 지네요^^
    드디어 해결이 ㅋㅋ
    그리고
    로그인을 수정할 수 있는 파일을 찾아 보았는데 통 어디있는지 모르겠네요.
    어느 폴더에 있는지만이라도 알려주시면 고맙게습니다:)
  • profile profile
    라이믹스 기준 ./modules/member/lang/ko.php에
    $lang->cmd_login = '로그인'; 이라고 있을 텐데 보통을 그걸 쓰는 걸로 알고 있습니다.(XE는 파일위치나 파일명이 다를지도 몰라요)
    다만, 이걸 바꾸면 다른 레이아웃이나 스킨에 영향을 줄 수 있기 때문에 비추입니다.
    그보다는 사용하시는 스킨 등에서 바꾸는 게 좋을 텐데, 저야 제가 사용하는 것이 아니다보니 자세하게 말씀드리기가 아무래도 어렵죠ㅜ
  • profile profile
    감사합니다, 해결했습니다^^ 저는 XE를 쓰고 있는데
    lag.xml 파일안에 있었습니다. 아래와 같이 수정했습니다.
    편안한 봄밤 보내세요~~
    저는 아직도 해결해야 할 것들이 참 많네요 ㅎ

    <value xml:lang="ko"><![CDATA[SNS로그인]]></value>