oauth2Client.getToken缺少refresh_token

Tho*_*ggi 5 javascript node.js oauth-2.0 google-api-nodejs-client

我有一个小型快递服务器,有两条路线.然后它将json标记写入文件(我知道非常不安全).出于某种原因,没有refresh_token.在文档中有一个评论,offline对于access_type获取refresh_token,设置并且它仍然不起作用

access_type: 'offline', // 'online' (default) or 'offline' (gets refresh_token)
Run Code Online (Sandbox Code Playgroud)

这是快递服务器,对不起,如果承诺让任何人失望.

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 () {})
Run Code Online (Sandbox Code Playgroud)

Tho*_*ggi 11

refresh_token当用户开始用他们的帐户授权您的应用程序只发送.所以它的getToken功能只是第一次返回它(因为你应该存储它).添加approval_prompt: "force"generateAuthUrl选项中,我每次都可以获得它.

  • 我真的希望在文档中更清楚地说明这一点.把头发拉了几个小时. (4认同)
  • `approval_prompt:“强制”` [不再有效](https://github.com/googleapis/oauth2client/issues/453)。相反,请使用“提示:“同意””。 (3认同)