在Heroku调度程序中使用会话

时间:2016-04-13 15:17:35

标签: node.js session heroku scheduled-tasks gmail-api

我希望能够延迟在我的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 }
    }));

2 个答案:

答案 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)

我使用下面的代码做类似的事情 var email = require(“emailjs”); var server = email.server.connect({     用户:“user@gmail.com”,     密码:“密码”,     主持人:“smtp.gmail.com”,     ssl:是的 }); var cron = require('node-schedule'); cron.scheduleJob({hour:2,minute:30,dayOfWeek:0},function(){     server.send({         文字:“我希望这有效”,         来自:“你< user@gmail.com>”,         to:“reciever< reciever@gmail.com>”,         主题:“我的电子邮件主题”     },function(err,message){         //错误处理     }); }); 希望这可以帮助