0
登錄後我想重新確定/ makeitem,這需要打開一個會話。這有效,但在提交登錄表單後,我收到錯誤消息,並且必須刷新以輸入/ makeitem。在我開始使用connect-session-sequelize之前,這工作得很好。 cookie會立即存儲在db.Sessions中,以便部分工作。將會話設置爲存儲在數據庫中之後,在註冊之前會有一段延遲。節點/快速/快速會話,
這是怎麼發生的?我是否需要在中間件的其他地方檢查會話? 我怎樣才能讓它重定向沒有任何hazzle? 我錯過了一些明顯的東西嗎?
謝謝,請不要只是鏈接到文檔,我一直在看文檔,他們讓我相當新的程序員腦部受傷。我需要愛情和教育。
SERVER.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();
});
....
ROUTES/INDEX.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');
});
....
中間件/ INDEX.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;
我相關的依賴關係是:
- 「明示」: 「^ 4.14.0」
- 「表達會話」: 「^ 1.14.1」
- 「sequelize」: 「^ 3.5.1」
- 「連接會話-sequelize」: 「^ 3.1.0」
- 「sequelize」: 「^ 3.5.1」
- 「sqlite3的」: 「^ 3.1.4」