向浏览器发送cookie

时间:2015-07-24 11:07:50

标签: javascript node.js express passport.js

我使用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');
});

然而,当我把它放在我的代码中时,这个函数永远不会被调用,因为它已经使用了之前声明的其他路径之一。任何人都可以帮忙吗?

1 个答案:

答案 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);
}