2
Mozilla’s client-sessions으로 express.js 앱에서 세션을 구현하고 있는데 도움이 필요합니다.라우터의 미들웨어 기능을 호출하십시오.
ReferenceError: requireLogin is not defined
//index.js (라우터)
var express = require('express')
, router = express.Router()
, user = require('../public/js/models/test.js');
router.get('/profile-header', requireLogin, function (req, res, html) {
console.log(req.session);
res.render('templates/profile-header.jade', { title: 'Default' })
});
router.get('/sign-in', function (req, res, html) {
res.render('templates/sign-in.jade', { title: 'Sign In' })
});
router.get('/blog-home', requireLogin, function (req, res, html) {
res.render('templates/blog-home.jade', { title: 'Blog' })
});
router.get('/logout', function(req, res) {
req.session.reset();
res.redirect('/');
});
router.post('/profile-header', function (req, res, html) {
user.login(req.body, function (e, o) {
if (o) {
//add session
req.session.user = o;
res.redirect('/profile-header');
} else {
res.render('templates/sign-in.jade', { error: 'Invalid email or password.' });
}
});
});
module.exports = router;
//app.js
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var stylus = require('stylus');
var bcrypt = require('bcrypt');
var should = require('should');
var session = require('client-sessions');
var index = require('./routes/index');
var users = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
function requireLogin (req, res, next) {
if (!req.user) {
console.log("pd");
res.redirect('/sign-in');
} else {
next();
}
};
app.use(session({
cookieName: 'session',
secret: 'random_string_goes_here',
duration: 30 * 60 * 1000,
activeDuration: 5 * 60 * 1000,
}));
app.use(logger('dev'));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(cookieParser());
app.use(stylus.middleware(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'public')));
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
app.use('/', index);
app.use('/users', users);
app.use(function(req, res, next) {
if (req.session && req.session.user) {
user.exist(req.session.username, function (e, o) {
if (user) {
req.user = user;
delete req.user.user_password; // delete the password from the session
req.session.user = user; //refresh the session value
console.log(req.session);
res.locals.user = user;
}
// finishing processing the middleware and run the route
next();
});
} else {
next();
}
});
// listener
app.listen(process.env.PORT || 3000, function() {
\t console.log('Listening on http://localhost:' + (process.env.PORT || 3000))
})
module.exports = app;
당신의 도움을 위해 Thx!
좋아 들으, 나는 그것을 호출 할 필요는 없습니다 내가 필요로 할 때 그것을 필요로/외부 서비스 및 수입
requireLogin
를 이동하는 게 좋을 것 app.js tho에 있습니까? 제대로 작동하는 유일한 시간은 함수와 get/post가 모두 app.js에있을 때였습니다. –코드에서 보았 듯이'app.js'에서 호출하지 않습니다. 그냥 거기에 선언되었습니다. 그래서 외부 서비스로 옮기면'app.js'에서 제거 할 수 있습니다. – rkm
좋아요, 그래도 문제가 생겼습니다. 요청이 잘되면서 내 사용자 정보를 얻습니다. 그런 다음 requireLogin에 의해 로그인 페이지로 리디렉션됩니다 (로그인이 성공한 경우 해당 정보가 아닙니다). 왜 그런지 모르겠다. 나를 도와 주셔서 고마워! –