首页 > 解决方案 > google picker to drive files with access token from backend 结果请登录错误

问题描述

我需要从后端(节点 js)创建带有访问令牌的谷歌选择器

我收到此错误消息:

“Google 要从您的在线存储中选择一个项目,请登录。登录”

从nodeJs我通过刷新令牌获得成功的访问令牌,如下所示:

let cookies = req.headers['authorization']
let getCookies = JSON.parse(cookies)
let oauth2Client = getOAuthClient()
oauth2Client.setCredentials(getCookies)
return oauth2Client.credentials.access_token

在客户端(反应)

//oauthToken= acsess token from server
  const picker = new window.google.picker.PickerBuilder()
                             .addView(view)
                             .setOAuthToken(oauthToken)
                             .setCallback(this.props.onChange);

fetch 获取访问令牌并将其发送到创建选择器功能。

fetch(`http://localhost:4002/driveApi`, {
        method: 'GET',
        headers: {
          authorization: TokenToString
        }
      })
        .then(response =>response.json())
        .then(response => {
          console.log(response.data)
          this.createPicker(response.data)
       
        })

创建选择器功能:

  createPicker (oauthToken) {
    //this.props.onAuthenticate(oauthToken)

    if (this.props.createPicker) {
      return this.props.createPicker(window.google, oauthToken)
    }
    
    const googleViewId = window.google.picker.ViewId['DOCS']
    const view = new window.google.picker.View(googleViewId)

    if (this.props.mimeTypes) {
      view.setMimeTypes(this.props.mimeTypes.join(','))
    }
    if (this.props.query) {
      view.setQuery(this.props.query)
    }

    if (!view) {
      throw new Error("Can't find view by viewId")
    }

    const picker = new window.google.picker.PickerBuilder()
      .addView("DOCS")
      .setOAuthToken(oauthToken)
      .setCallback(this.props.onChange)

    if (this.props.origin) {
      picker.setOrigin(this.props.origin)
    }

    if (this.props.navHidden) {
      picker.enableFeature(window.google.picker.Feature.NAV_HIDDEN)
    }

    if (this.props.multiselect) {
      picker.enableFeature(window.google.picker.Feature.MULTISELECT_ENABLED)
    }

    picker.build().setVisible(true)
  }

添加构建凭据代码:

function getOAuthClient () {
 return new OAuth2(ClientId, ClientSecret, RedirectionUrl)
}

function getAuthUrl () {
 var oauth2Client = getOAuthClient()
 var scopes =
   'https://www.googleapis.com/auth/gmail.send https://www.googleapis.com/auth/contacts.readonly https://www.googleapis.com/auth/calendar https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/drive.readonly'
 var url = oauth2Client.generateAuthUrl({
   access_type: 'offline',
   scope: scopes
 })
 return url
}```

标签: node.jsgoogle-drive-apigoogle-oauthgoogle-picker

解决方案


推荐阅读