node.js - Node.js - 护照和谷歌身份验证
问题描述
我想从谷歌日历(公共)中获取所有日历数据。我创建了一个小脚本,应该在 node.js 中获取数据。尝试加载页面时,我被重定向到谷歌登录页面。是否可以在不登录谷歌的情况下加载所有事件/一次登录完整的应用程序?
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);
});
});
解决方案
高度怀疑它,但您可以尝试使用此SO post中提到的 API KEYS 。
推荐阅读
- swiftui - 在 SwiftUI 中传递 Lat/Long 函数
- javascript - Gatsby Image 查询返回乱序图像
- javascript - 如何从函数内部发送消息(Discord.js)
- python - 丢失的字母,基本转换
- powerbi - 何时在 Power BI 中使用计算字段与度量?
- javascript - 修复了导航栏在不在顶部且不滚动时消失的问题,无法按预期工作
- docker - 如何在 Docker 中通过端点创建不同的端口映射?
- python - 使用 python 请求发布带有数组的请求
- linux - 使用 io_uring 进行多路复用
- python - 如何将 WTForms 输入的默认时区更改为 MST