我希望能够延迟在我的heroku / nodejs应用上发送电子邮件。 我知道如何使用Heroku Scheduler来延迟任务。 然后,我可以检索需要为哪个用户发送哪些电子邮件。 但是要使用Gmail API,我需要检索经过身份验证的用户会话,但我不知道如何执行此操作。 我正在使用pg存储会话,但我不相信它会具体:
app.use(session({
secret: 'xxx',
store: new pgSession({
conString: config.db.url
}),
resave: false,
saveUninitialized: false,
cookie: { maxAge: 24192000000 }
}));
答案 0 :(得分:1)
高级
在某些时候,您的路线链中有一个触发延迟电子邮件的功能,您应该只在任务寄存器中包含会话(来自req.session
)。从那里只需确保您可以使用正确的用户数据发送电子邮件(也就是会话数据中的user_id或user_email)。
更详细
您需要考虑一下中间件如何处理这个问题。
app.use(session({
等会向您的session
对象添加req
个对象。在您的路径中的某个位置,您在调用app.use
(session)
部分后处理另一个函数(例如登录或注册)。因此,对于Gmail,您正在向Gmail API调用Oauth请求。他们将向您返回用户访问令牌,您可以使用该令牌来获取其用户数据(例如电子邮件地址)。从那里,您可以将他们的用户数据附加到您的req.session
对象。
一个简单示例(修改供您使用)
app.use(session({
secret: 'xxx',
store: new pgSession({
conString: config.db.url
}),
resave: false,
saveUninitialized: false,
cookie: { maxAge: 24192000000 }
}));
app.post('/register', function(req, res, next) {
// You'll have to write your own google client implementation :)
var token = getGoogleAccessToken();
// Again, left to you to write.
var user_email = fetchUserGoogleEmail( token );
var session = req.session;
session.email = user_email;
// Register heroku delayed task with session data.
// Save user data and create account, etc.
});
答案 1 :(得分:0)