Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.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
Javascript 如何使用节点js生成cookie?_Javascript_Jquery_Node.js_Cookies_Passport.js - Fatal编程技术网

Javascript 如何使用节点js生成cookie?

Javascript 如何使用节点js生成cookie?,javascript,jquery,node.js,cookies,passport.js,Javascript,Jquery,Node.js,Cookies,Passport.js,如何使用node js生成cookie,我正在使用express session node插件生成cookie。请告诉我哪里做错了 安装快速会话插件 app.js const session = require('express-session'); app.use(session({ secret: 'asdassadsazz', resave: true, saveUninitialized: true, //cookie: { secure: true }

如何使用node js生成cookie,我正在使用express session node插件生成cookie。请告诉我哪里做错了

安装
快速会话
插件

app.js

const session = require('express-session');

app.use(session({
    secret: 'asdassadsazz',
    resave: true,
    saveUninitialized: true,
    //cookie: { secure: true }
}));

app.use(passport.initialize());
app.use(passport.session());
passport.js

passport.serializeUser(function(id, done) {
    console.log('ddd');
//    console.log(user);
    done(null, id);
});

passport.deserializeUser(function(id, done) {
    User.findById(id, function (err, user) {
        done(err, user);
    });
});
controller.js

 register: async (req, res, next) => {
        console.log(req.body);
        try {
            const result = await db.User.create({
                email: req.body.email,
                password: req.body.password
            })

           console.log(result.id);
            req.login(result.id,function () {
                res.json({message:"Registration successfully"});

            })
        } catch (e) {
            console.log(e)
        }

    },
它应该生成cookie并存储在浏览器中,但它不会生成任何cookie

服务器日志

Executing (default): SHOW INDEX FROM `Users` FROM `sql12252060`
app is running on 5000
OPTIONS /users/register 204 1.943 ms - 0
{ email: 'a@g.com', password: '1' }
email element
Executing (default): INSERT INTO `Users` (`id`,`email`,`password`) VALUES (DEFAULT,'a@g.com','$2a$10$zhTaqEbEeMOaD8F..CQYRufALc5dD4l899qMKRw0QRxIWvrPMSlpq');
17
ddd
POST /users/register 200 932.036 ms - 39

是不同域的问题。我的服务器在5000端口上运行,客户端在3000端口上运行。resave选项应为false。
    Please note that secure: true is a recommended option. However, it requires an https-enabled website, i.e., HTTPS is necessary for secure cookies. If secure is set, and you access your site over HTTP, the cookie will not be set. If you have your node.js behind a proxy and are using secure: true, you need to set "trust proxy" in express:

   var app = express()
  app.set('trust proxy', 1) // trust first proxy
  app.use(session({
  secret: 'keyboard cat',
  resave: false,
  saveUninitialized: true,
  cookie: { secure: true }
}))
重新保存: 强制将会话保存回会话存储,即使在请求期间从未修改过会话。根据您的存储,这可能是必要的,但它也会创建竞争条件,即客户端向您的服务器发出两个并行请求,并且在一个请求中对会话所做的更改可能会在另一个请求结束时被覆盖,即使它没有做出任何更改(此行为还取决于您使用的存储)

默认值为true,但不推荐使用默认值,因为默认值将在将来更改。请研究此设置并选择适合您的用例的设置。通常,您需要false

我如何知道这对我的店铺是否有必要?最好的了解方法是与您的商店核实是否实施了触摸法。如果是,则可以安全地将resave设置为false。如果它没有实现touch方法,并且您的存储设置了存储会话的过期日期,那么您可能需要重新保存:true