【问题标题】:how to generate cookie using node js?如何使用节点 js 生成 cookie?
【发布时间】:2019-01-26 12:36:44
【问题描述】:

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

安装express-session插件

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 上运行

【问题讨论】:

    标签: javascript jquery node.js cookies passport.js


    【解决方案1】:
        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 }
    }))
    

    【讨论】:

      【解决方案2】:

      重新保存选项应该是假的。 重新保存: 强制将会话保存回会话存储,即使在请求期间从未修改过会话。根据您的商店,这可能是必要的,但它也可以创建竞争条件,其中客户端向您的服务器发出两个并行请求,并且在另一个请求结束时对会话所做的更改可能会在另一个请求结束时被覆盖,即使它没有进行任何更改(此行为还取决于您使用的商店)。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-29
        • 1970-01-01
        • 1970-01-01
        • 2013-09-21
        • 1970-01-01
        • 1970-01-01
        • 2013-04-19
        • 1970-01-01
        相关资源
        最近更新 更多