Дополнительное разрешение при использовании кнопки входа в Google
Я использую кнопку входа Google на своем веб-сайте. Я могу авторизовать пользователей и получить информацию о профиле пользователя.
Я следил за этим. Интеграция входа в Google в ваше веб-приложение.
<div id="my-signin2" ></div>
gapi.signin2.render('my-signin2', {
'scope': 'profile email',
'width': 240,
'height': 50,
'longtitle': true,
'theme': 'light',
'onsuccess': this.onSuccess,
'onfailure': this.onFailure
});
onSuccess(googleUser) {
var id_token = googleUser.getAuthResponse().id_token;
var name = googleUser.getBasicProfile().getName());
var email = googleUser.getBasicProfile().getEmail());
var imageUrl = googleUser.getBasicProfile().getImageUrl());
}
onFailure(error) {
}
Теперь мне нужно прочитать контакты пользователей, пока он авторизуется с помощью Google.
Поэтому для получения контактов я добавил область
https://www.googleapis.com/auth/contacts.readonly
gapi.signin2.render('my-signin2', {
'scope': 'profile email https://www.googleapis.com/auth/contacts.readonly',
'width': 240,
'height': 50,
'longtitle': true,
'theme': 'light',
'onsuccess': this.onSuccess,
'onfailure': this.onFailure
});
Все работает нормально. После того, как пользователь авторизуется с помощью gmail, он отображает экран разрешений для пользователя и запрашивает разрешение.
Но когда пользователь отказывает в разрешении, он даже не регистрирует пользователя. Я хочу, чтобы пользователь вошел в систему, даже если он отрицает, все нормально, если я не получу его контакты.
Я читал о запросе дополнительных областей.
var options = new gapi.auth2.SigninOptionsBuilder(
{'scope': 'https://www.googleapis.com/auth/contacts.readonly'});
googleUser = auth2.currentUser.get();
googleUser.grant(options).then(
function(success){
console.log(JSON.stringify({message: "success", value: success}));
},
function(fail){
alert(JSON.stringify({message: "fail", value: fail}));
});
Когда я использую это после в onSuccess(после того, как пользователь авторизует электронную почту), он всегда переходит к методу сбоя. Ошибка выдачи " popup_closed_by_user "
1 ответ
Согласно обсуждению в этой теме
Нашел решение.
Создал еще одну кнопку для запроса дополнительной области и вызвал метод предоставления на клике кнопки.
Если вы установите такие параметры, это не работает
var options = new gapi.auth2.SigninOptionsBuilder(
{'scope': 'https://www.googleapis.com/auth/contacts.readonly'});
Для получения областей вы должны использовать методы
let googleUser = auth2.currentUser.get();
var options = new gapi.auth2.SigninOptionsBuilder();
options.setScope('https://www.googleapis.com/auth/contacts.readonly');
googleUser.grant(options).then(
function(success){
console.log(JSON.stringify({message: "success", value: success}));
},
function(fail){
alert(JSON.stringify({message: "fail", value: fail}));
});