1

我正在尝试设置 Google API 使用的授权,以便向网站管理员工具 API 发出请求,但我似乎无法理解如何触发身份验证。我已经设置了一个路由,它应该在访问时触发身份验证权限调用,但是我得到一个持续的加载信号,没有收到数据响应。我正在使用 Google 的库https://github.com/google/google-api-nodejs-client/,并让我的 OAuth2 客户端 ID 凭据重定向 uri 指向,http://localhost:3000/因为我想在本地测试设置。

这是我的代码:

index.js

var express = require('express');
var app = express();
var handlebars = require('hbs');
var google = require('googleapis');
var webmastertools = google.webmasters('v3');





app.set('port', process.env.PORT || 3000);

// Handlebars View Engine
app.set('view engine', handlebars);

app.use(express.static(__dirname + '/public')); // set the public directory


app.listen(app.get('port'), function(){
    console.log('Server on port'+app.get('port'));
});

var routes = require('./app/routes');

app.use(routes);

这是我的 route.js:

var express = require('express');
var router  = express.Router();
var google = require('googleapis');
var OAuth2 = google.auth.OAuth2;

var oauth2Client = new OAuth2('*client-id*', '*client-secret*', 'http://localhost:3000/');


router.get('/', function(req, res){
        res.render('index.hbs');
    });


router.get('/auth', function(req, res){
    //generater a url that asks permissions for Webmaster Tools
    var scopes = [
    'https://www.googleapis.com/auth/webmasters'
    ];

    var url = oauth2Client.generateAuthUrl({
    access_type: 'online',
    scope: scopes   
    });

});

router.get('404', function(req, res){
    res.type('text/plain');
    res.status(404);
    res.send('404 - Not Found');
});


router.get('500', function(err,req, res, next){
    console.error(err.stack);
    res.type('text/plain');
    res.status(500);
    res.send('500 - Server Error');
});


module.exports = router;
4

1 回答 1

2

我认为您应该重定向到 generateAuthUrl 提供的授权 url。就像是:

router.get('/auth', function(req, res){
    //generater a url that asks permissions for Webmaster Tools
    var scopes = [
    'https://www.googleapis.com/auth/webmasters'
    ];

    var url = oauth2Client.generateAuthUrl({
    access_type: 'online',
    scope: scopes   
    });
res.redirect(url);
});

这会将用户带到同意页面,他/她可以在其中接受范围,然后重定向到您的重定向 URL。我面前没有它,但我认为我就是这样做的。

于 2015-09-21T11:29:59.290 回答