oauth2Client.getToken 缺少 refresh_token

Posted

技术标签:

【中文标题】oauth2Client.getToken 缺少 refresh_token【英文标题】:oauth2Client.getToken missing refresh_token 【发布时间】:2015-04-18 08:11:14 【问题描述】:

我有一个小型快递服务器,它有两条路线。然后它将 json 令牌写入文件(我知道非常不安全)。由于某种原因,没有refresh_token。在文档中有一条评论,offline for access_type 得到 refresh_token,它已设置但仍无法正常工作

access_type: 'offline', // 'online' (default) or 'offline' (gets refresh_token)

这里是快递服务器,如果承诺让任何人失望,请见谅。

var Promise = require("bluebird")
var express = require('express')
var app = express()

var google = require('googleapis')
var OAuth2 = google.auth.OAuth2
var clientSecrets = require("./client_secrets.json")
var oauth2Client = new OAuth2(clientSecrets.web.client_id, clientSecrets.web.client_secret, clientSecrets.web.redirect_uris[0]);
oauth2Client.getToken = Promise.promisify(oauth2Client.getToken)

var fs = Promise.promisifyAll(require("fs"))

app.get('/google', function (req, res) 
  var url = oauth2Client.generateAuthUrl(
    access_type: 'offline',
    scope: "https://www.googleapis.com/auth/drive"
  )
  return res.redirect(url)
)

app.get('/oauth2callback', function (req, res) 
  return oauth2Client.getToken(req.query.code).then(function(tokens)
    fs.writeFileAsync("./tokens.json", JSON.stringify(tokens), "utf8");
    return res.json(tokens)
  ).catch(function(err)
    return res.redirect("/google")
  )
)

var server = app.listen(3000, function () )

【问题讨论】:

【参考方案1】:

refresh_token 仅在用户最初使用其帐户授权您的应用时发送。所以 getToken 函数只在第一次返回它(因为你应该存储它)。在generateAuthUrl选项中添加了approval_prompt: "force",每次都能得到。

【讨论】:

我真的希望在文档中更清楚地说明这一点。拉我的头发好几个小时了。 @rob 当我终于发现它是如何工作的时,我觉得有必要发布并回答它并尝试为其他人节省一些时间。很高兴它有帮助。 我只是把它留在这里,以便任何光头路过的人都在寻找更实际的 google api 体验:OAuth Playground。我希望 Google 将这些链接放在前面,并在文档的参考部分中包含所需的信息。 . . approval_prompt: "force"no longer works。相反,请使用prompt: "consent"

以上是关于oauth2Client.getToken 缺少 refresh_token的主要内容,如果未能解决你的问题,请参考以下文章

ie解决缺少函数错误

天然气调用支付缺少参数怎么解决

调用支付jsapi 缺少参数appid

缺少 RapidAPI 应用程序密钥(不缺少)

调用jsapi缺少参数$key0$

SQL 错误:ORA-00907:缺少右括号 00907。00000 -“缺少右括号”