Как получить токен доступа из Google Javascript SDK для входа в систему Google?
У меня есть простой одностраничный javascript webapp, который использует "Вход в Google для веб-сайтов": https://developers.google.com/identity/sign-in/web/sign-in
Как я могу получить токен доступа для пользователя? Мне нужно поддающееся проверке утверждение идентификатора пользователя на моем сервере. Мне не нужен автономный доступ; Я просто хочу знать, что, когда веб-клиент отправляет на мой сервер ajax-запрос, я могу доверять идентификатору зарегистрированного пользователя.
Ответы
Ответ 1
Для целей проверки было бы лучше использовать id_token
, который является частью ответа auth, и может быть извлечен в любой момент, например:
gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse().id_token
Библиотеки клиентов API Google предлагают функции для проверки id_token и предоставляют вам информацию о пользователе на стороне сервера: https://developers.google.com/api-client-library/
Ответ 2
Надеюсь, у вас все хорошо.
Вот решение, вы можете попробовать следующее:
На самом деле нет такой функции, которую имя getAccessToken (Android Only) определяет в GoogleSignin.android.js, как написано здесь https://github.com/devfd/react-native-google-signin.
Но самое главное, они уже внедрили решение в GoogleSignin.android.js. просто взгляните на код ниже из GoogleSignin.android.js
currentUserAsync() {
return new Promise((resolve, reject) => {
const sucessCb = DeviceEventEmitter.addListener('RNGoogleSignInSilentSuccess', (user) => {
this._user = user;
RNGoogleSignin.getAccessToken(user).then((token) => {
this._user.accessToken = token;
this._removeListeners(sucessCb, errorCb);
resolve(this._user);
})
.catch(err => {
this._removeListeners(sucessCb, errorCb);
resolve(this._user);
});
});
Дело только в том, что мы действительно используем этот код с умом.
Я использую приведенный ниже код, чтобы получить access_token, и это поможет мне решить проблему с токеном доступа.
Я изменяю функцию, подобную этой, в GoogleSignin.android.js
currentUserAsync() {
return new Promise((resolve, reject) => {
const sucessCb = DeviceEventEmitter.addListener('RNGoogleSignInSilentSuccess', (user) => {
this._user = user;
RNGoogleSignin.getAccessToken(user).then((token) => {
this._user.accessToken = token;
this._removeListeners(sucessCb, errorCb);
resolve(token);
})
.catch(err => {
this._removeListeners(sucessCb, errorCb);
resolve(this._user);
});
});
и я вызываю эту функцию следующим образом: index.android.js.
_signIn() {
GoogleSignin.signIn()
.then((user) => {
console.log('this1' + JSON.stringify(user));
this.setState({user: user});
var gettoken = GoogleSignin.currentUserAsync(user).then((token) => {
console.log('USER token', token);
this.setState({user: user});
}).done();
}).catch((err) => {
console.log('WRONG SIGNIN', err);
})
.done();
}
Вы можете назвать это как индивидуальную функцию, которая выглядит так.
в GoogleSignin.android.js
getAccessTok(user)
{
RNGoogleSignin.getAccessToken(user).then((token) => {
this._user.accessToken = token;
resolve(token);
})
.catch(err => {
this._removeListeners(sucessCb, errorCb);
console.log('got error');
resolve(this._user);
});
}
а из index.android.js просто вызывают эту функцию следующим образом
_getToken(){
console.log(GoogleSignin.getAccessTok(this.state.user));
}
вам нужно только передать текущему пользователю доступ к токену доступа.
Надеюсь, это поможет вам. Отличный день. Спасибо.