【问题标题】:Save a JWT as a cookie将 JWT 保存为 cookie
【发布时间】:2017-11-02 17:59:41
【问题描述】:

所以基本上我想将 JWT 令牌存储在 cookie 中,以便以后可以访问它来验证 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('/');
      });

提前致谢,埃德。

【问题讨论】:

  • 你使用的是 express 节点还是普通节点?

标签: node.js reactjs cookies jwt


【解决方案1】:

阅读文档后,这似乎不是设置 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();
}

【讨论】:

  • 它似乎正在工作,多年来一直在为此苦苦挣扎。非常感谢你,你是最棒的!
猜你喜欢
  • 2016-04-10
  • 1970-01-01
  • 2022-01-04
  • 2020-02-18
  • 2015-09-15
  • 2016-09-13
  • 2021-10-16
  • 2020-12-09
  • 1970-01-01
相关资源
最近更新 更多