Действия по минимизации влияния изменений области действия на пользователей
- Если вашему приложению требуется адрес электронной почты аутентифицированного пользователя и вы ранее использовали для этой цели
profile.emails.read
, используйте вместо негоemail
. - Получите одобрение для
profile.emails.read
с одобренным запросом на проверку. См. раздел Как отправить на проверку? - Отзовите предыдущий токен пользователя в области, которую необходимо удалить, или полностью удалите доступ к приложению. Например, токен с доступом
profile.emails.read
должен быть отозван. Мы рекомендуем вам применить отзыв, пока ваши пользователи находятся в вашем приложении, чтобы вы могли немедленно получить согласие пользователя. - Предложите пользователям повторно согласиться с новой областью действия, например
email
, безprofile.emails.read
. - Удалите область, которая должна быть постепенно исключена из конфигурации экрана согласия OAuth API Google.
Изменения, которые необходимо внести для переноса вашего сайта с входа в 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+ Sign-In использовали поток кода . Это означает, что приложения Android, iOS или JavaScript получают код OAuth от Google, а клиент отправляет этот код обратно на сервер вместе с защитой от подделки межсайтовых запросов. Затем сервер проверяет код и получает токены обновления и доступа для получения информации профиля пользователя из API people.get
.
Теперь Google рекомендует вам запросить токен идентификатора и отправить этот токен идентификатора от вашего клиента на ваш сервер. Токены идентификатора имеют встроенную защиту от межсайтовой подделки, а также могут быть статически проверены на вашем сервере, что позволяет избежать дополнительного вызова API для получения информации профиля пользователя с серверов Google. Следуйте инструкциям для проверки токенов идентификатора на вашем сервере .
Если вы по-прежнему предпочитаете использовать поток кода для получения информации профиля, вы можете это сделать. Как только ваш сервер получит токен доступа, вам необходимо получить информацию о профиле пользователя от конечных точек userinfo
указанных в нашем документе Обнаружение входа в систему. Ответ API форматируется иначе, чем ответ профиля Google+, поэтому вам необходимо обновить синтаксический анализ до нового формата.
Перенос кнопки входа в формате HTML
Если вы включили кнопку входа в Google+ на свою страницу, присвоив элементу класс g-signin
, внесите следующие изменения:
Когда вы указываете свой идентификатор клиента в теге
<meta>
, атрибутеdata-
или объекте параметров, измените строку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-signin2
элементу кнопки входа вместоg-signin
. Кроме того, укажите отдельные обратные вызовы для успешного и неудачного выполнения вместо одного обратного вызова, как в следующем примере:<!-- 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();
}
Перенос динамически отображаемой кнопки входа
Если вы включили кнопку входа в Google+ на свою страницу, вызвав gapi.signin.render()
, внесите следующие изменения:
Когда вы указываете свой идентификатор клиента в теге
<meta>
, атрибутеdata-
или объекте параметров, измените строку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.signin2.render()
а не с помощьюgapi.signin.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-
или объекте параметров, измените строку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
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()
.
Миграция гибридного потока на стороне сервера
Если вы использовали API JavaScript для получения одноразового кода авторизации для передачи на ваш сервер, внесите следующие изменения:
Измените область действия с
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
в параметр области.