사용자의 이메일 주소를 얻기위한 Google OAuth API?
내 개인 Google 계정을 사용하여 Google의 OAuth 2.0 Playground를 사용하고 있지만 Playground를 사용하여 Gmail 주소를 복구 할 수없는 것 같습니다.
내가 사용하는 범위는 다음과 같습니다.
email profile https://www.googleapis.com/auth/plus.login
하지만 API를 호출하면 :
https://www.googleapis.com/oauth2/v2/userinfo
성, 이름, 성별, 사진 등 사용자에 대한 다양한 정보를 얻었지만 사용자의 이메일이 반환되지 않습니다.
사용자의 이메일 주소는 어떻게 검색합니까? 범위가 잘못되었거나 잘못된 API를 호출하고 있습니까? 나는 이것이 매우 간단해야한다고 생각하지만 문자 그대로 몇 시간 동안 이것을 알아 내려고 노력했고 사용자의 이메일 주소를 지속적으로 제공하는 API 및 범위 조합을 찾을 수 없습니다.
업데이트 : 2018 년 12 월
12 월 20 일에 Google은 2019 년 3 월에 Google+ API가 중단되고 2019 년 1 월 말부터 간헐적 인 오류가 발생한다고 발표했습니다 . plus.people.get
엔드 포인트의 일부 는 더 이상 사용되지 않으며 종료 될 예정 입니다.
userinfo
엔드 포인트는 사용되지 드 - (설명 참조) 가정 정보를 제공해야한다입니다
https://developers.google.com/identity/sign-in/web/devconsole-project
범위를 요청 하고email
필드를 요청합니다 .
설명 : 2019 년 1 월 24 일
Google 은 userinfo (v2) 엔드 포인트가 더 이상 사용되지 않는다고 문서화 했지만 나중에 "사용되지 않지만 이전 버전과의 호환성을 위해 계속 사용 가능"으로 변경했습니다.
현재 문서 에서는 현재 지원되는 openid
방법을 통해 프로필 및 이메일 정보를 얻는 방법에 대해 설명합니다 . 여기에는 OpenID Connect에서 요구하는대로 검색 문서에 지정된 "userinfo"엔드 포인트 사용이 포함됩니다 .
현재 해당 URL은 https://openidconnect.googleapis.com/v1/userinfo
이지만 이는 과거에 변경되었으며의 검색 문서 https://accounts.google.com/.well-known/openid-configuration
가 사용할 URL에 대한 신뢰할 수있는 소스입니다.
그래서 명확하게 :
- 이전 사용자 정보 URL은 이전 버전과의 호환성을 위해 유지됩니다.
- 새 사용자 정보 URL은 검색 문서에서 사용할 수 있습니다.
그럼에도 불구하고 모든 플러스 버전 (아래 설명)은 더 이상 사용되지 않으며 제거 될 예정 입니다.
원래 답변
당신이하고있는 일과 그것을하려는 방법에 많은 문제가 있습니다.
우선, https://www.googleapis.com/oauth2/v2/userinfo
엔드 포인트는 더 이상 사용되지 않으며 2014 년 9 월에 제거 될 예정입니다. 일관되지 않게 작동하기 시작 했으므로 사용하지 마십시오.
@abraham이 언급했듯이에서 people.get 엔드 포인트를 사용합니다 https://www.googleapis.com/plus/v1/people/me
. 그러면 주소 배열이 포함 된 이메일 필드 가 제공 됩니다. 귀하의 경우에는 "계정"유형을 가진 하나만있을 것입니다.
2017 년 기준 : email
범위를 사용합니다 . API 요청 승인을 참조하십시오 .
이 이메일 범위는 https://www.googleapis.com/auth/userinfo.email 범위 와 동일하며이를 대체합니다 .
https://www.googleapis.com/auth/userinfo.email
범위 를 추가 하거나 교체 https://www.googleapis.com/oauth2/v2/userinfo
할 수 있습니다. 제공되는 HTML 예제를 사용하는 경우 공백으로 구분 된 여러 범위를 나열 할 수 있습니다.
<span
class="g-signin"
data-callback="signInCallback"
data-clientid="{{ plus_id }}"
data-cookiepolicy="single_host_origin"
data-requestvisibleactions="http://schemas.google.com/AddActivity"
data-scope="https://www.googleapis.com/auth/plus.login
https://www.googleapis.com/auth/userinfo.email">
</span>
내 서버가 / oauth2 / v2 / userinfo api 호출에 대한 응답으로 이메일을받지 못한 이유를 찾아 여기에 왔습니다. 내가 이것을 본 것은 단 한 번이었고 과거에는 잘 작동했습니다.
대답은 좋은 리드를주었습니다. 이 문제를 해결하는 동안 도움이 된 몇 가지 다른 리소스가 있습니다. 그래도 응답에서 항상 이메일을 기대하는 것이 괜찮은지 확실하지 않습니다. 그래서-이메일이 반환되지 않는 경우 코드에 오류 처리를 넣으십시오.
- Google+ 로그인으로 마이그레이션하는 방법에 대한 Google API 문서 입니다.
- https://www.googleapis.com/auth/userinfo.email 범위
- 인력 자원 문서
- Add google+ api to the project using google developer console. The complimentary (quota) of calls is quite high (20m for google+ signin api per day).
- Add error handling & logging in server code in case api returns no emails. In my case, I was looking only type='account' email.
This is actually a bit of a challenge as Google does not provide an email by default. You must specifically request it from Google Plus.
const scope = [
'https://www.googleapis.com/auth/plus.me', // request access here
'https://www.googleapis.com/auth/userinfo.email',
];
auth.generateAuthUrl({
access_type: 'offline',
prompt: 'consent',
scope: scope,
});
const plus = google.plus({ version: 'v1', auth });
const me = await plus.people.get({ userId: 'me' });
const userEmail = me.data.emails[0].value;
There is a full version in this blog post I wrote: https://medium.com/@jackscott/how-to-use-google-auth-api-with-node-js-888304f7e3a0
For signing in with Google using OAuth 2.0, there's no need to make a separate request to get user's email.
When Google calls the callback URL, it provides a code
in the query string that you could use to exchange for access token and ID token. The ID token is a JWT that contains identity information about the user, which includes the email address.
See more information here: https://developers.google.com/identity/protocols/OpenIDConnect
I have been following Prisoner's answer right above, and it helped me... until I received the email from Google Developers about how Google+ API will be shutdown on March 7, 2019.
I scrounged around and found this solution to get the email using an id_token
that is returned when you authorize an app with the email
scope on your developer console.
From Google Sign-in for Websites:
PHP에서 ID 토큰을 확인하려면 PHP 용 Google API 클라이언트 라이브러리를 사용하세요. 라이브러리를 설치합니다 (예 : Composer 사용).
composer require google/apiclient
그런 다음 verifyIdToken () 함수를 호출합니다. 예를 들면 :
require_once 'vendor/autoload.php'; // Get $id_token via HTTPS POST. $client = new Google_Client(['client_id' => $CLIENT_ID]); // Specify the CLIENT_ID of the app that accesses the backend $payload = $client->verifyIdToken($id_token); if ($payload) { $userid = $payload['sub']; // If request specified a G Suite domain: //$domain = $payload['hd']; } else { // Invalid ID token }
이렇게하면 로그인 한 사용자의 이메일도 포함 된 사용자 정보가 포함 된 배열이 반환됩니다. 이것이 다른 사람에게 도움이되기를 바랍니다.
https://developers.google.com/gmail/api/v1/reference/users/getProfile
Gmail API의 경우 nodejs 코드에 다음을 추가하십시오.
function getUsersEmail (auth) {
const gmail = google.gmail({version: 'v1', auth})
gmail.users.getProfile({
userId: 'me'
}, (err, {data}) => {
if (err) return console.log('The API returned an error: ' + err)
console.log(data.emailAddress)
})
}
Gmail API : https://developers.google.com/gmail/api/guides/
authorizationRequest
주어진 범위로 변경하고 scope=openid%20email%20profile
userinfoapi를 사용하십시오. 이 링크는 나를 위해 일했습니다.
참조 URL : https://stackoverflow.com/questions/24442668/google-oauth-api-to-get-users-email-address
'programing' 카테고리의 다른 글
인증서의 공개 키를 .pem 형식으로 저장하는 방법 (0) | 2021.01.17 |
---|---|
중첩 된 ifelse 문 (0) | 2021.01.17 |
Bootstrap-select-변경시 이벤트를 발생시키는 방법 (0) | 2021.01.17 |
SSH -X“경고 : 신뢰할 수없는 X11 전달 설정 실패 : xauth 키 데이터가 생성되지 않음” (0) | 2021.01.17 |
for 루프에서 생성 된 Pandas 데이터 프레임 추가 (0) | 2021.01.17 |