node.js - 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
}```
解决方案
推荐阅读
- dax - 在度量中使用相关的表值
- python - 无法使用 Flask 应用程序工厂和 Flask-Restful 添加资源
- php - 提交数据到 JSON/API URL
- html - Html 视频无法在手机上加载
- f# - 记录属性的 F# nameof
- java - 有没有办法在循环内从 firestore 检索数据?
- c - 信号处理程序在执行后结束进程
- javascript - 更改 JavaScript 过滤器以过滤值是否包含/包含值
- laravel - production.ERROR:类 App\Http\Middleware\SetLocale 在 Laravel 中不存在
- discord - 如何使用 guilds.join?