범위 변경이 사용자에게 미치는 영향을 최소화하는 단계
- 애플리케이션에 인증된 사용자의 이메일 주소가 필요하며 이전에 이 목적으로
profile.emails.read
를 사용한 경우email
을 대신 사용하세요. - 승인된 인증 요청으로
profile.emails.read
승인을 받습니다. 확인을 위해 어떻게 제출하나요?를 참고하세요. - 삭제할 범위의 이전 사용자 토큰을 취소하거나 애플리케이션에 대한 액세스 권한을 완전히 삭제합니다. 예를 들어
profile.emails.read
액세스 권한이 있는 토큰은 취소해야 합니다. 사용자 동의를 즉시 받을 수 있도록 사용자가 애플리케이션에 있는 동안 취소를 적용하는 것이 좋습니다. - 사용자에게
profile.emails.read
없이 새 범위(예:email
)에 다시 동의하라는 메시지를 표시합니다. - Google API OAuth 동의 화면 구성에서 지원 중단할 범위를 삭제합니다.
사이트를 Google+ 로그인에서 Google 로그인으로 이전하기 위해 변경해야 하는 사항은 사용하는 Google+ 로그인 흐름에 따라 다릅니다. 일반적으로 이전하려면 로그인 버튼, 요청된 범위, Google에서 프로필 정보를 가져오는 방법에 관한 안내를 업데이트해야 합니다.
로그인 버튼을 업데이트할 때는 G+를 언급하거나 빨간색을 사용하지 마세요. 업데이트된 브랜딩 가이드라인을 준수합니다.
대부분의 G+ 로그인 애플리케이션은 plus.login
, plus.me
, plus.profile.emails.read
스코프의 조합을 요청했습니다. 다음과 같이 범위를 재매핑해야 합니다.
이전 범위 | 새 범위 |
---|---|
plus.login |
profile |
plus.me |
openid |
plus.profile.emails.read |
email |
Google+ 로그인을 구현하는 많은 개발자가 코드 흐름을 사용했습니다. 즉, Android, iOS 또는 JavaScript 앱이 Google에서 OAuth 코드를 가져오고 클라이언트는 크로스 사이트 요청 위조 방지와 함께 이 코드를 서버로 다시 전송합니다. 그런 다음 서버는 코드를 확인하고 갱신 토큰과 액세스 토큰을 가져와 people.get
API에서 사용자 프로필 정보를 가져옵니다.
이제 ID 토큰을 요청하고 클라이언트에서 서버로 해당 ID 토큰을 전송하는 것이 좋습니다. ID 토큰에는 교차 사이트 위조 방지 기능이 내장되어 있으며 서버에서 정적으로 확인할 수도 있으므로 Google 서버에서 사용자 프로필 정보를 가져오기 위한 추가 API 호출이 필요하지 않습니다. 안내에 따라 서버에서 ID 토큰의 유효성을 검사합니다.
여전히 코드 흐름을 사용하여 프로필 정보를 가져오려면 그렇게 할 수 있습니다. 서버에 액세스 토큰이 있으면 로그인 탐색 문서에 지정된 userinfo
엔드포인트에서 사용자 프로필 정보를 가져와야 합니다. API 응답의 형식은 Google+ 프로필 응답과 다르므로 파싱을 새 형식으로 업데이트해야 합니다.
HTML 로그인 버튼 이전
요소에 g-signin
클래스를 할당하여 페이지에 Google+ 로그인 버튼을 포함한 경우 다음과 같이 변경합니다.
<meta>
태그,data-
속성 또는 매개변수 객체에서 클라이언트 ID를 지정할 때는 다음 예와 같이 문자열clientid
를client_id
로 변경합니다.<!-- Google+ Sign-in (old) --> <meta name="google-signin-clientid" content="YOUR_CLIENT_ID">
<!-- Google Sign-in (new) --> <meta name="google-signin-client_id" content="YOUR_CLIENT_ID">
로그인 버튼 요소에
g-signin
대신g-signin2
클래스를 할당합니다. 또한 다음 예와 같이 단일 콜백 대신 별도의 성공 및 실패 콜백을 지정합니다.<!-- Google+ Sign-in (old) --> <div class="g-signin" data-callback="signinCallback"> </div>
<!-- Google Sign-in (new) --> <div class="g-signin2" data-onsuccess="onSignIn" data-onfailure="onSignInFailure"> </div>
단일 콜백 핸들러 대신 다음 예와 같이 성공 핸들러와 실패 핸들러를 정의합니다.
// Google+ Sign-in (old) function signinCallback(authResult) { if (authResult['status']['signed_in']) { // Handle successful sign-in } else { // Handle sign-in errors console.log('Sign-in error: ' + authResult['error']); } }
// Google Sign-in (new) function onSignIn(googleUser) { // Handle successful sign-in } function onSignInFailure() { // Handle sign-in errors }
이렇게 변경하면 기본 범위가
profile email openid
로 업데이트됩니다. 다음과 같이 이름, 이메일, 사진 이미지 URL과 같은 사용자의 기본 프로필 정보를 가져올 수 있습니다.// Google Sign-in (new) function onSignIn(googleUser) { let profile = googleUser.getBasicProfile(); let fullName = profile.getName(); let email = profile.getEmail(); let imageUrl = profile.getImageUrl(); }
동적으로 렌더링된 로그인 버튼 이전
gapi.signin.render()
를 호출하여 페이지에 Google+ 로그인 버튼을 포함한 경우 다음과 같이 변경합니다.
<meta>
태그,data-
속성 또는 매개변수 객체에서 클라이언트 ID를 지정할 때는 다음 예와 같이 문자열clientid
를client_id
로 변경합니다.<!-- Google+ Sign-in (old) --> <meta name="google-signin-clientid" content="YOUR_CLIENT_ID">
<!-- Google Sign-in (new) --> <meta name="google-signin-client_id" content="YOUR_CLIENT_ID">
다음 예와 같이
gapi.signin.render()
대신gapi.signin2.render()
로 로그인 버튼을 렌더링합니다.// Google+ Sign-in (old) gapi.signin.render('myButton', additionalParams);
// Google Sign-in (new) gapi.signin2.render('myButton', additionalParams);
단일 콜백 핸들러 대신 다음 예와 같이 성공 핸들러와 실패 핸들러를 정의합니다.
// Google+ Sign-in (old) function signinCallback(authResult) { if (authResult['status']['signed_in']) { // Handle successful sign-in } else { // Handle sign-in errors console.log('Sign-in error: ' + authResult['error']); } }
// Google Sign-in (new) function onSignIn(googleUser) { // Handle successful sign-in } function onSignInFailure() { // Handle sign-in errors }
이렇게 변경하면 기본 범위가 profile email openid
로 업데이트됩니다. getBasicProfile()
메서드를 사용하여 사용자의 기본 프로필 정보를 가져올 수 있습니다.
JavaScript에서 시작된 로그인 흐름 이전
사용자가 로그인 버튼을 클릭할 때 gapi.auth.signIn()
호출을 사용하여 로그인 흐름을 시작한 경우 다음을 변경합니다.
<meta>
태그,data-
속성 또는 매개변수 객체에서 클라이언트 ID를 지정할 때는 다음 예와 같이 문자열clientid
를client_id
로 변경합니다.<!-- Google+ Sign-in (old) --> <meta name="google-signin-clientid" content="YOUR_CLIENT_ID">
<!-- Google Sign-in (new) --> <meta name="google-signin-client_id" content="YOUR_CLIENT_ID">
다음 예와 같이 버튼을 누르면
gapi.auth2.attachClickHandler()
를 사용하여 로그인 흐름을 시작합니다.// Google+ Sign-in (old) var signinButton = document.getElementById('signinButton'); signinButton.addEventListener('click', function() { gapi.auth.signIn(additionalParams); });
// Google Sign-in (new) auth2 = gapi.auth2.init(); auth2.attachClickHandler('signinButton', additionalParams, onSignIn, onSignInFailure);
단일 콜백 핸들러 대신 다음 예와 같이 성공 핸들러와 실패 핸들러를 정의합니다.
// Google+ Sign-in (old) function signinCallback(authResult) { if (authResult['status']['signed_in']) { // Handle successful sign-in } else { // Handle sign-in errors console.log('Sign-in error: ' + authResult['error']); } }
// Google Sign-in (new) function onSignIn(googleUser) { // Handle successful sign-in } function onSignInFailure() { // Handle sign-in errors }
이렇게 변경하면 기본 범위가 profile email openid
로 업데이트됩니다. getBasicProfile()
메서드를 호출하여 사용자의 기본 프로필 정보를 가져올 수 있습니다.
하이브리드 서버 측 흐름 마이그레이션
JavaScript API를 사용하여 서버에 전달할 일회성 승인 코드를 획득한 경우 다음을 변경하세요.
범위를
https://www.googleapis.com/auth/plus.login
에서profile
로 변경합니다.다음 예와 같이 기존 콜백 함수와 함께
gapi.auth2.grantOfflineAccess()
메서드를 사용합니다.<!-- Google+ Sign-in (old) --> <div class="g-signin" data-scope="https://www.googleapis.com/auth/plus.login" data-clientid="YOUR_CLIENT_ID" data-redirecturi="postmessage" data-accesstype="offline" data-callback="signInCallback"> </div>
// Google Sign-in (new) auth2 = gapi.auth2.init({ client_id: 'YOUR_CLIENT_ID', scope: 'profile' }); ... auth2.grantOfflineAccess().then(signInCallback);
사용자의 이메일에 대한 액세스 권한도 필요한 경우 범위 매개변수에 email
를 추가합니다.