将JWT保存为cookie

时间:2017-06-01 14:17:47

标签: node.js reactjs cookies jwt

所以基本上我想在一个cookie中存储一个JWT令牌,以便以后可以访问它来验证API调用。我无法弄清楚如何做到这一点。

 passport.use(new LocalStrategy(
      function(email, password, done) {
       User.getUserByEmail(email, function(err, user){
        if(err) throw err;
        if(!user){
            return done(null, false, {message: 'Unknown User'});
        }

        User.comparePassword(password, user.password, function(err, isMatch){
            if(err) throw err;
            if(isMatch){

            const token = jwt.sign(user, config.secret, {
              expiresIn: 604800 // 1 week
            });

                    //STORE TOKEN AS A COOKIE

                return done(null, user);
            } else {
                return done(null, false, {message: 'Invalid password'});
            }
        });
       });
        }
    ));
    router.post('/login',
      passport.authenticate('local', {successRedirect:'/', failureRedirect:'/users/login',failureFlash: true}),
      function(req, res) {
        res.redirect('/');
      });

提前致谢,Ed。

1 个答案:

答案 0 :(得分:3)

阅读文档后,似乎这可能不是设置jwt cookie的最佳位置。为此,您需要访问响应对象。也许您可以在POST路由中的身份验证中间件之后使用另一个中间件函数设置cookie?

   router.post('/login',
      passport.authenticate('local', {successRedirect:'/', failureRedirect:'/users/login',failureFlash: true}),
      setJWTFn, //insert middlelware here
      function(req, res) {
        res.redirect('/');
      });

其中setJTWFn类似于:

function setJWTFn(req, res, next) {
   //create JWT
  const jwt = createJWT();
  res.cookie('jwt', jwt);
  next();
}