如何从Google登录Javascript SDK获取访问令牌?

时间:2015-04-21 07:41:50

标签: javascript google-plus google-oauth google-plus-signin

我有一个简单的单页javascript webapp,它使用" Google Sign-In for Websites":https://developers.google.com/identity/sign-in/web/sign-in

如何为用户获取访问令牌?我需要在我的服务器上验证用户身份的可验证性。我不想离线访问;我只想知道当Web客户端向我的服务器发送ajax请求时,我可以信任登录用户的身份。

3 个答案:

答案 0 :(得分:48)

出于验证目的,最好使用作为身份验证响应一部分的id_token,并且可以在以下任意点检索:

gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse().id_token

Google API客户端库提供验证id_token的功能,并在服务器端为您提供相关的用户信息:https://developers.google.com/api-client-library/

答案 1 :(得分:1)

首先需要初始化SDK 然后调用下面的函数来获取access-token

gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse().access_token; 

此解决方案帮助我在 javascript 中获取访问令牌。

答案 2 :(得分:0)

希望你的表现很好。 这是解决方案,你可以试试这个: 实际上没有这样的函数名称getAccessToken(仅限Android)在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));
}

只需要传递当前用户来获取访问令牌。 希望这会对你有所帮助。祝你有个美好的一天。谢谢。