oauth2.0 我如何获得“代码”,以便稍后使用gapi-script交换访问和刷新令牌

scyqe7ek  于 2023-04-29  发布在  其他
关注(0)|答案(1)|浏览(79)

目前,我有以下代码,它给了我access_token,但为了使事情更安全,我只想要作为code的响应,我可以从前端发送到服务器并交换access_token和refresh_token的代码。如何使用gapi-script实现此功能?
我的代码如下所示:

import './App.css';
import { Component } from 'react';
import { gapi, loadAuth2WithProps} from 'gapi-script';

class MyAppLogin extends Component {
  async componentDidMount() {
    const auth2 = await loadAuth2WithProps(
      gapi, 
      {
        client_id: '<MY CLIENT ID>', 
        scope: 'email https://www.googleapis.com/auth/content https://www.googleapis.com/auth/siteverification https://www.googleapis.com/auth/adwords',
        access_type: 'offline'
      }
    );
    
    this.attachSignin(document.getElementById('customBtn'), auth2);
  }

  attachSignin (element, auth2) {
    auth2.attachClickHandler(element, {},
      (googleUser) => {
        console.log(googleUser)
      }, (error) => {
      console.log(JSON.stringify(error))
    });
  };

  render() {
    return (
      <div id="customBtn" className="btn login">
        Login
      </div>
    )
  }

}

export default MyAppLogin;

我已经挖到这个遗留插件有点在这里,如果我使用插件我得到的代码成功,如果我使用下面的代码:-

<GoogleLogin
  clientId='<CLIENT ID>'
  onSuccess={this.onSuccess}
  onFailure={this.onFailure}
  responseType='code'
  online='offline'
/>

但是,我不想使用这个插件,而是想使用本机gapi插件.对此有任何意见吗?

tf7tbtn2

tf7tbtn21#

使用grantOfflineAccess()解决了这个问题,如下所示:

attachSignin () {
  const { auth2 } = this.state
  auth2.grantOfflineAccess().then(function(resp) {
    var auth_code = resp.code;
    console.log(auth_code)
  });
};

render() {
  return (
    <div id="customBtn" className="btn login" onClick={this.attachSignin} >
      Login
    </div>
  )
}

是相当混乱的组合看react-google-login的源代码(遗留插件,使用gapi内部)和上述链接的谷歌文档让这个决议。

相关问题