如何从 Google 登录 Javascript SDK 获取访问令牌?
How to get the access token from Google Sign-In Javascript SDK?
我有一个简单的单页 javascript 网络应用程序,它使用 "Google Sign-In for Websites":https://developers.google.com/identity/sign-in/web/sign-in
如何为用户获取访问令牌?我需要在我的服务器上对用户身份进行可验证的断言。我不想离线访问;我只想知道,当网络客户端向我的服务器发送 ajax 请求时,我可以信任登录用户的身份。
出于验证目的,最好使用 id_token
,它是身份验证响应的一部分,可以在任何时候像这样检索:
gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse().id_token
Google API 客户端库提供了验证 id_token 并在服务器端为您提供关联用户信息的功能:https://developers.google.com/api-client-library/
希望你一切顺利。
这是解决方案,你可以试试这个:
实际上,在GoogleSignin.android.js 中没有定义这样的函数名称getAccessToken(仅Android),如此处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));
}
您只需传递当前用户即可获取访问令牌。
希望这会帮助 you.Have 一个伟大的 day.Thank 你。
是的,现在是 2021 年。我也遇到了同样的问题。
我的解决方案是
gapi.signin2.render(this.id, {
scope: this.scope,
width: this._width,
height: this._height,
longtitle: this._longTitle,
theme: this.theme,
// Set to true, otherwise only user actively logging in with Google will have access token
onsuccess: (googleUser: gapi.auth2.GoogleUser) => googleUser.getAuthResponse(true),
onfailure: () => this.handleFailure()
});
首先需要初始化SDK
然后调用下面的函数获取access-token
gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse().access_token;
此解决方案帮助我在 javascript 中获取访问令牌。
我有一个简单的单页 javascript 网络应用程序,它使用 "Google Sign-In for Websites":https://developers.google.com/identity/sign-in/web/sign-in
如何为用户获取访问令牌?我需要在我的服务器上对用户身份进行可验证的断言。我不想离线访问;我只想知道,当网络客户端向我的服务器发送 ajax 请求时,我可以信任登录用户的身份。
出于验证目的,最好使用 id_token
,它是身份验证响应的一部分,可以在任何时候像这样检索:
gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse().id_token
Google API 客户端库提供了验证 id_token 并在服务器端为您提供关联用户信息的功能:https://developers.google.com/api-client-library/
希望你一切顺利。 这是解决方案,你可以试试这个: 实际上,在GoogleSignin.android.js 中没有定义这样的函数名称getAccessToken(仅Android),如此处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));
}
您只需传递当前用户即可获取访问令牌。 希望这会帮助 you.Have 一个伟大的 day.Thank 你。
是的,现在是 2021 年。我也遇到了同样的问题。
我的解决方案是
gapi.signin2.render(this.id, {
scope: this.scope,
width: this._width,
height: this._height,
longtitle: this._longTitle,
theme: this.theme,
// Set to true, otherwise only user actively logging in with Google will have access token
onsuccess: (googleUser: gapi.auth2.GoogleUser) => googleUser.getAuthResponse(true),
onfailure: () => this.handleFailure()
});
首先需要初始化SDK 然后调用下面的函数获取access-token
gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse().access_token;
此解决方案帮助我在 javascript 中获取访问令牌。