【问题标题】:Nodejs OAuth errorNodejs OAuth 错误
【发布时间】:2016-12-04 09:00:43
【问题描述】:

我是 nodejs 的新手,尤其是 oath 无论如何,我正在关注 nodejs 的 googleapis,这就是我从现在开始做的事情

var fs = require('fs');
var readline = require('readline');
var google = require('googleapis');
var express = require('express');
var app = express();

var port = 3000;

var OAuth2 = google.auth.OAuth2;
var oauth2client;



app.get('/', function(req, res){

    fs.readFile('client_secret.json', function processClientSecrets(err, content) {
        if (err) {
            console.log('Error loading client secret file: ' + err);
            return;
        }
        // Authorize a client with the loaded credentials, then call the
        // Gmail API.
        var credentials = JSON.parse(content);
        var clientSecret = credentials.web.client_secret;
        var clientId = credentials.web.client_id;
        var redirectUrl = credentials.web.redirect_uris;

        oauth2client = new OAuth2(  
            clientId,
            clientSecret,
            redirectUrl
        );

        var SCOPES = ['https://www.googleapis.com/auth/gmail.readonly'];

        var info = "Accedi a GMail"

        var getCode = oauth2client.generateAuthUrl({
            // 'online' (default) or 'offline' (gets refresh_token) 
            access_type: 'offline',

            // If you only need one scope you can pass it as string 
            scope: SCOPES
        });

        res.send(info+"<br><br><button onclick='window.location.href=\""+ getCode +"\"'>Log in</button>");

    });
});


app.get("/code", function(req,res){
    var code = req.query.code;
    res.send(code);
    oauth2client.getToken(code, function (err, tokens) {
    // Now tokens contains an access_token and an optional refresh_token. Save them. 
        if (!err) {
            oauth2Client.setCredentials(tokens);
            console.log(tokens);
        }
        else{
            console.log(err);
        }
    });
});

console.log('Server listen in port '+port+'. Connect to localhost');
app.listen(port);

我得到了完美的代码 但是当我到达令牌部分时,我收到来自 getToken 函数的无效请求错误

{ Error: invalid_request
at Request._callback (C:\Users\Edoardo\node_modules\google-auth-library\lib\
transporters.js:81:15)
at Request.self.callback (C:\Users\Edoardo\node_modules\google-auth-library\
node_modules\request\request.js:187:22)
at emitTwo (events.js:106:13)
at Request.emit (events.js:191:7)
at Request.<anonymous> (C:\Users\Edoardo\node_modules\google-auth-library\no
de_modules\request\request.js:1044:10)
at emitOne (events.js:96:13)
at Request.emit (events.js:188:7)
at IncomingMessage.<anonymous> (C:\Users\Edoardo\node_modules\google-auth-li
brary\node_modules\request\request.js:965:12)
at emitNone (events.js:91:20)
at IncomingMessage.emit (events.js:185:7) code: 400 }

我刚刚从 googleapis 页面复制了它 我做错了什么?

【问题讨论】:

    标签: javascript node.js express gmail oauth2


    【解决方案1】:

    您检查过响应正文吗? “error”和“error_description”可以为您提供有关问题的更多详细信息。通常缺少参数或之前使用的代码,这样可能会导致错误。 像这样向 getToken 回调添加第三个参数:

    在您的代码中更改此项以获取响应正文:

    oauth2client.getToken(code, function (err, tokens) {
        if (!err) {
            console.log(tokens);
            console.log(response.body);
            oauth2Client.setCredentials(tokens);
            //DO something great
        } else {
            console.log(err);
            console.log(response.body.error);
            console.log(response.body.error_description);
            // :(
        }
    });
    

    //response parameter added
    oauth2Client.getToken(codigo, function (err, tokens,response) {
        if (!err) {
            console.log(tokens);
            console.log(response.body);
            oauth2Client.setCredentials(tokens);
            //DO something great
        } else {
            console.log(err);
            console.log(response.body.error);
            console.log(response.body.error_description);
            // :(
        }
    })
    

    我遇到了同样的问题,所以我开始查看内部库代码并找到了这个。有了这个,也许你可以找到你的问题。 祝你好运;)

    【讨论】:

    • MIssing 参数:redirect_uri 我现在必须添加什么?
    猜你喜欢
    • 2015-04-04
    • 2018-02-26
    • 2019-03-02
    • 2015-07-24
    • 2016-08-23
    • 2019-01-01
    • 2014-01-30
    • 2017-04-01
    • 1970-01-01
    相关资源
    最近更新 更多