Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 将JWT另存为cookie_Node.js_Reactjs_Cookies_Jwt - Fatal编程技术网

Node.js 将JWT另存为cookie

Node.js 将JWT另存为cookie,node.js,reactjs,cookies,jwt,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(

所以基本上我想在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.

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

在阅读了文档之后,这里似乎不是设置JWTCookie的最佳位置。为此,您需要访问响应对象。也许您可以在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();
}

您使用的是快速节点还是普通节点?您使用的是快速节点还是普通节点?它似乎在工作,多年来一直在努力解决这个问题。非常感谢你,你是最棒的!它似乎在起作用,多年来一直在努力解决这个问题。非常感谢你,你是最棒的!