正在进行的Google Calendar API访问

时间:2012-12-13 22:17:53

标签: javascript node.js google-api google-calendar-api

如何请求访问用户的日历一次,然后查询事件而无需再次请求访问权限?是否存在可以授予连续访问权限的访问密钥,只要它没有被撤销?

我目前正在运行google-calendar + express的nodejs应用中使用mongodb模块。

以下示例显示了制作OAuth请求并重定向回应用的部分代码。这非常有效。我想要的是,一旦我有权访问,就可以随时查询用户的事件。这将用于预订应用程序,一旦用户注册其公开的Google日历,就可以让其他人查看其可用性。

我查看了Google Calendar API文档,但我无法弄清楚我需要的持续访问需要什么。

配置

var GoogleCalendar = require('google-calendar');
var google_calendar = new GoogleCalendar.GoogleCalendar(config.google.clientId, config.google.clientSecret, 'http://localhost:3000/authentication');

显示路线

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

    // redirect user to Google Authentication
    var access_token = req.session.access_token;
    if(!access_token) {
            req.session.authReturn = req.url;
            return res.redirect('/authentication');
    }

    google_calendar.listCalendarList(access_token, function(err, calendarList) {
            // do something with the calendar events...
    }

    ...

验证路线

app.all('/authentication', function(req, res){

    // Redirect the user to Google's authentication form 
    if(!req.query.code){

        google_calendar.getGoogleAuthorizeTokenURL(function(err, redirectUrl) {
            if(err) return res.send(500,err);
            return res.redirect(redirectUrl);
        });
    }
    // Get access_token from the code
    else {
        google_calendar.getGoogleAccessToken(req.query, function(err, access_token, refresh_token) {

            if(err) return res.send(500,err);

            req.session.access_token = access_token;
            req.session.refresh_token = refresh_token;

            return res.redirect(req.session.authReturn);
        });
    }
});

1 个答案:

答案 0 :(得分:2)

使用Oauth 2.0离线访问参数。详见:

https://developers.google.com/accounts/docs/OAuth2WebServer#offline