Node.js - паспорт и Google Auth - PullRequest
       15

Node.js - паспорт и Google Auth

0 голосов
/ 02 июня 2018

Я хочу получить все данные календаря из календаря Google (общедоступного).Я создал небольшой скрипт, который должен получать данные в node.js.При попытке загрузить страницу, я перенаправлен на страницу входа в Google.Можно ли загрузить все события без входа в систему в Google / войти за один раз для полного приложения?

var util = require('util');
var express = require('express');

var config = require('./config');
var gcal = require('./node_modules/google-calendar/GoogleCalendar');

var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var session = require('express-session');


var app = express();
var passport = require('passport');
var GoogleStrategy = require('passport-google-oauth20').Strategy;

app.use(cookieParser());

app.use(bodyParser.urlencoded({
    extended: true
}));

var sessionConfig = {
    secret: 'backendCalendar',
    cookie: {},
    resave: false,
    saveUninitialized: true,
    signed: true
};

app.use(session(sessionConfig));

app.use(passport.initialize());
app.use(passport.session());

app.listen(8082);


passport.use(new GoogleStrategy({
    clientID: '***',
    clientSecret: '***',
    callbackURL: "/auth/google/callback",
    scope: [
        'https://www.googleapis.com/auth/calendar'
    ]
},
function (accessToken, refreshToken, profile, done) {
    profile.accessToken = accessToken;
    return done(null, profile);
}
));

app.get('/auth',
   passport.authenticate('google', {session: false}));

app.get('/auth/callback',
   passport.authenticate('google', {session: false, failureRedirect: '/login'}),
   function (req, res) {
       req.session.access_token = req.user.accessToken;
       res.redirect('/');
});


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

    if (!req.session.access_token) return res.redirect('/auth');
    var accessToken = req.session.access_token;

    gcal(accessToken).calendarList.list(function (err, data) {
        if (err) return res.send(500, err);
        return res.send(data);
    });
});

app.use('/:calendarId', function (req, res) {

    if (!req.session.access_token) return res.redirect('/auth');
    var accessToken = req.session.access_token;
    var calendarId = req.params.calendarId;

    gcal(accessToken).events.list(calendarId, {maxResults: 1}, function (err, data) {
        if (err) return res.send(500, err);

        console.log(data)
        if (data.nextPageToken) {
            gcal(accessToken).events.list(calendarId, {
                maxResults: 1,
                pageToken: data.nextPageToken
            }, function (err, data) {
                console.log(data.items)
            })
        }


        return res.send(data);
    });
});

1 Ответ

0 голосов
/ 04 июня 2018

Сильно сомневаюсь, но вы можете попробовать использовать API-ключи, как упомянуто в этом ТАК .

...