2017-11-29 3 views
0

Google 앱에 작업을 구축 중이며 사용자를 식별해야합니다 (전자 메일을 받겠습니다). 다음과 같은 방식으로 계정 연결을 구현했습니다. 사용자가 자신의 Google 계정으로 로그인하면 "Google 로그인 버튼"이있는 간단한 웹 페이지를 호스팅하기 때문에 사용자가 액세스 토큰을 Google 측, 내가 아니라), 그 시점에서 나는 사용자와 구글에 대한 행동을 인증 토큰을 얻습니다. 계정 연결을 구현 했으므로 이제는 액세스 토큰을 얻을 수 있습니다. 다음 단계는 무엇입니까? GET 요청을 일부 API에 보내고 이메일을 다시 받아야한다고 생각합니다. 문제는 자바 스크립트에서 GET 요청과 관련하여 많은 문제가 있다는 것입니다 (힌트 : 처음 자바 스크립트입니다). 누군가 나를 도울 수 있습니까?Google의 액션에서 JavaScript로 GET 요청 보내기

답변

0

여기에는 두 가지 잠재적 인 문제가 있습니다. 하나는 기술적 인 논리적 문제입니다.

기술적 인 문제 - Firebase에서 실행하고 있습니까? 기본 "불꽃 계획"(구글, 을 장려하지만을 필요로하지 않는 것입니다) 중포 기지 기능을 사용하는 경우

Google 서비스를 제외하고 아웃 바운드 함수 호출을 허용하지 않습니다. 따라서 GET API 호출을하려면 "Blaze Plan"으로 업데이트해야합니다 (유료 요금제로 나열되어 있지만 개발 및 간단한 배포에 적합한 무료 사용 레벨을 가지고 있습니다). .

논리 문제 -?! 계정이 연결 했는가

당신은 당신이 계정 연결을 구현 토큰 도착했다 - 위대한

그 토큰 당신은 구글에게 액세스 할 수있는 권한을 부여하는 것을 나타냅니다 당신의 서비스 중 하나를 대신하여 서비스를 제공 할 수 있습니다. 사용자가 Google에 허용하도록 허용했습니다. 토큰을 사용하여 사용자 님이 권한을 부여했습니다.

사용자의 이메일 주소가있는 경우 토큰을 데이터베이스 또는 이메일 주소 또는 다른 주장이 포함 된 JWT의 색인으로 사용할 수 있지만 그 이메일 주소를 처음. 이 주소를 사용하여 Google이 해당 사용자에게 직접 보낸 이메일 주소를 가져올 수는 없습니다.

당신 당신과 함께 자신의 계정을 만들 때 사용자가 자신의 이메일 주소 구글의 정체성 서비스를 요청하는 서비스에 권한을 부여해야 -하지만 구글 Assistant는 할 얘기가 승인 서비스는 별도의 과정 .

+0

감사 대답 Node.js를 수행됩니다,하지만 어쩌면 내가 충분히 내 상황을 설명하지 않았다 계정이 나는 설정 링킹 않습니다 서비스가 없기 때문에 사용자를 내 서비스 계정에 연결하지 마십시오! 필자가 필요한 것은 사용자의 이메일을 얻는 것이 었습니다. 계정 연결을 설정하는 유일한 방법 이었지만 내 계정 연결 페이지는 "Google 페이지에 로그인"입니다. firebase에서 기능을 실행하고 있지만 GET 요청을 Google apis 중 하나를 향해 수행해야하므로 문제가되어서는 안됩니다. –

+0

그런 다음 질문을 업데이트하여 계정 연결을 어떻게 구현했는지 확인하십시오. 일반적으로 Google은 사용자가 자신의 서버를 계정 연결 엔드 포인트로 사용하도록 허용하지 않습니다. – Prisoner

+0

방금 ​​게시물을 수정했습니다.이 방법이 더 명확 할 수도 있습니다. –

0

당신이 찾고있는 GET 요청이

let accestoken = assistant.getUser().accessToken; 
    const https = require('https'); 
    https.get('https://www.googleapis.com/plus/v1/people/me?access_token=' + accestoken, (resp) => { 

     let jsondata = ''; 
     // A chunk of data has been recieved. 
     resp.on('data', (chunk) => { 
      jsondata += chunk; 
     }); 

     // The whole response has been received. Print out the result. 
     resp.on('end',() => { 
      parsedData = JSON.parse(jsondata); 
      console.log(parsedData); 
      //parsedData.emails[0] is the email address 
     }); 
    })