gpt4 book ai didi

node.js - 在我将 session 设置为存储在 db 中之后,它在注册之前会有一个延迟。 Node/ express / express session ,

转载 作者:行者123 更新时间:2023-12-03 22:23:54 24 4
gpt4 key购买 nike

登录后我想重定向到/makeitem,这需要一个 session 才能打开。这有效,但在提交登录表单后,我收到错误消息,我必须刷新才能输入/makeitem。在我开始使用 connect-session-sequelize 之前,这非常有效。 cookie 立即存储在 db.Sessions 中,以便该部分工作。

为什么会这样?我是否必须在中间件的其他地方检查 session ?
我怎样才能让它重定向而没有任何麻烦?
我错过了一些明显的东西吗?

谢谢,请不要只链接到文档,我整天都在看文档,它们让我的新程序员脑子受到了伤害。我需要一些爱和教育。

服务端JS

'use strict';

var express = require('express');
var session = require('express-session');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var _ = require('underscore');
var app = express();

var db = require('./db.js');

// initalize sequelize with session store
var SequelizeStore = require('connect-session-sequelize')(session.Store);


// if heroku use that, else use 3000
var PORT = process.env.PORT || 3000;

app.use(cookieParser());

// Track logins with express session
app.use(session({
secret: 'Magic mike',
resave: true,
saveUninitialized: false,
store: new SequelizeStore({
db: db.sequelize
})
}));

// Make userId available in templates
app.use(function(req, res, next){
res.locals.currentUser = req.session.userId;
next();
});
....

路线/索引.JS
var express = require('express');
var router = express.Router();
var _ = require('underscore');
var mid = require('../middleware/');
var db = require('../db.js');

.....

// POST /login
router.post('/login', function(req, res, next) {
var body = _.pick(req.body, 'email', 'password');

if (req.body.email && req.body.password) {
db.user.authenticate(body).then(function(user) {
req.session.userId = user.id;
return res.redirect('makeitem');
});
} else {
var err = new Error('All fields required.');
err.status = 400;
err.message = 'All fields required.';
console.log(err.message);
res.send(err.message);
}

});
.....
// GET /makeitem
router.get('/makeitem', mid.requiresLogin, function(req, res, next) {
var body = _.pick(req.body, 'description', 'amount', 'purchased');

return res.render('makeitem.pug');
});
....

中间件/索引.JS
 function loggedOut(req, res, next) {
if (req.session && req.session.userId) {
return res.redirect('/makeitem');
} else {
return next();
}
}

function requiresLogin(req, res, next) {
if (req.session && req.session.userId) {
return next();
} else {
var err = new Error('You must be logged in to view this page');
err.status = 401;
return next(err);
}
}

module.exports.loggedOut = loggedOut;
module.exports.requiresLogin = requiresLogin;

我的相关依赖项是:
  • " express ": "^4.14.0"
  • "express-session": "^1.14.1"
  • "Sequelize ": "^3.5.1"
  • "connect-session-sequelize": "^3.1.0"
  • "Sequelize ": "^3.5.1"
  • "sqlite3": "^3.1.4"
  • 最佳答案

    这听起来与问题非常相似:

    Race Condition When Used With Passport

    解决此问题的最佳方法是:

    router.post('/login', function(req, res, next) {
    var body = _.pick(req.body, 'email', 'password');

    if (req.body.email && req.body.password) {
    db.user.authenticate(body).then(function(user) {
    req.session.userId = user.id;

    // Add this :
    req.session.save(function() {
    return res.redirect('makeitem');
    });

    });
    } else {
    var err = new Error('All fields required.');
    err.status = 400;
    err.message = 'All fields required.';
    console.log(err.message);
    res.send(err.message);
    }

    });

    关于node.js - 在我将 session 设置为存储在 db 中之后,它在注册之前会有一个延迟。 Node/ express / express session ,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39712136/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com