我使用angular-passport中的文件结构和编码实践,使用angular,express和passport.js在现有项目中实现了一个简单的登录系统。
目前,我成功注册并登录用户。但是,当我刷新页面时,用户会注销。我知道我需要在浏览器上存储一个cookie才能使其工作,我也知道如何在代码中实现它。我的问题是把它放在哪里。
在我routes.js
我有以下内容:
var express = require('express'),
auth = require('./auth');
var router = express.Router();
var tools = require('../controllers/tools');
router.get('/api/tools/category/:name', tools.category);
router.get('/api/tools/:id', tools.show);
router.get('/api/tools', tools.all);
router.post('/api/tools', tools.create);
// router.get('api/search/:term', tools.search);
var users = require('../controllers/users');
router.get('/api/users/:id', users.show);
router.get('/api/users', users.all);
router.post('/api/users', users.create);
// Session Routes
var session = require('../controllers/session');
router.get('/api/session', auth.ensureAuthenticated, session.session);
router.post('/api/session', session.login);
router.delete('/api/session', session.logout);
module.exports = router;
在angular-passport repo中,作者在文件末尾添加了另一条路径:
router.get('/*', function(req, res) {
if(req.user) {
res.cookie('user', JSON.stringify(req.user.user_info));
}
res.render('index.html');
});
然而,当我把它放在我的代码中时,这个函数永远不会被调用,因为它已经使用了之前声明的其他路径之一。任何人都可以帮忙吗?
答案 0 :(得分:0)
更改路线的第1行:
app.get('/*', function(req, res) {
到此:
router.get('/*', function(req, res) {
你的代码永远无法运行cos nodejs不知道app
是什么。你从未定义过它。
更新:
更改您的服务器代码,以便在到期时间内自动发送会话cookie:
// express/mongo session storage
app.use(express.session({
secret: 'MEAN',
store: new mongoStore({
url: config.db,
collection: 'sessions'
}),
cookie: { maxAge : 3600000 } //1 Hour <-----------
}));
或更改passport.authenticate
函数以直接发送cookie并过期。
https://github.com/DaftMonk/angular-passport/blob/master/lib/controllers/session.js
exports.login = function (req, res, next) {
passport.authenticate('local', function(err, user, info) {
var error = err || info;
if (error) { return res.json(400, error); }
req.logIn(user, function(err) {
if (err) { return res.send(err); }
res.cookie('user', JSON.stringify(req.user.user_info), { expires: new Date(Date.now() + 1000 * 60 * hrs)} ); // <--
return res.send(200); // <--
});
})(req, res, next);
}