로그인 후/makeitem으로 다시 작성하고 싶습니다. 세션을 열어야합니다. 이 작동하지만 로그 양식을 제출 한 후 내 오류 메시지가 나타나고/makeitem 입력하려면 새로 고쳐야합니다. 내가 연결 세션 후편을 사용하기 전에 이것은 완벽하게 정상적으로 작동했습니다. 쿠키는 db.Sessions에 즉시 저장되어 파트가 작동합니다.세션이 db에 저장되도록 설정 한 후에는 등록되기 전에 지연이 있습니다. 노드/익스프레스/익스프레스 세션,
왜 이런 일이 발생합니까? 내 미들웨어의 다른 곳에서 세션을 확인해야합니까? 어떻게 헷갈 리지 않고 리디렉션 할 수 있습니까? 나는 명백한 무엇인가 놓치고 있냐?
감사합니다. docs에 연결하지 말고, 하루 종일 워드 프로세서를 보았습니다. 그들은 상당히 새로운 프로그래머가 머리를 아프게합니다. 나는 som 사랑과 교육이 필요합니다.
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"는