2013-07-03 63 views
0

所以我使用nodejs和mongodb並嘗試在其中一個頁面上設置cookie。我不知道我在做什麼錯誤設置cookie?

在app.js文件,它使用此

var express = require('express') 
    , app = express() 
    , dbUserModel = require('./models/user') 
    , db = require('./db') 
    , pass = require('./config/passport') 
    , passport = require('passport') 
    , routes = require('./routes/index') 
    , user = require('./routes/user') 
    , path = require('path') 
    , http = require('http') 
    , connect = require('connect') 
    , mongoose = require('mongoose') 
    , mongoConnect = mongoose.connect('mongodb://localhost/test5'); 

// all environments 

app.configure(function(){ 
    app.set('port', process.env.PORT || 3000); 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 


    app.use(express.favicon()); 
    app.use(express.logger('dev')); 
    app.use(express.bodyParser()); 
    app.use(express.cookieParser('secret')); 
    ///app.use(express.cookieSession()); 
    app.use(express.methodOverride()); 
    app.use(passport.initialize()); 
    app.use(passport.session()); 
    app.use(app.router); 
    app.use(express.static(path.join(__dirname, 'public')));  
}); 
    app.get('/', routes.index) 
    app.get('/register', user.register); 
    app.post('/register', user.registerPost); 
    app.get('/registerError', user.registerError); 
    app.get('/registerThanks', user.registerThanks); 
    app.get('/login', user.login); 
    app.post('/login', user.loginPost); 
    app.get('/loginError', user.loginError); 
    app.get('/userProfile', user.userProfile); 

http.createServer(app).listen(app.get('port'), function(){ 
    console.log('Express server listening on port ' + app.get('port')); 
    console.log('Users: ' + db.collections.users); 
}); 

然後我打電話給我的路由文件是非常標準。

這是我的代碼:

exports.login = function(req, res) { 
    res.render('login', {user: req.user, title: 'Weblio'}); 
}; 

exports.loginPost = function(req, res, next) { 
    passport.authenticate('local', function(err, user, info) { 
     if (err) { return next(err) } 
     if (!user) { return res.redirect('loginError'); } 
     req.logIn(user, function(err) { 
      if (err) { return next(err); } 
      return res.redirect('userProfile'); 
     }); 
    })(req, res, next); 
}; 

exports.loginError = function (req, res) { 
    res.render('loginError', {title: 'Weblio'}); 
}; 

exports.userProfile = function(req, res) {  
    res.render('userProfile', {user: req.user, title: 'Weblio'}); 
    res.cookie('name', 'test', { maxAge: 900000, httpOnly: true }); 

}; 

當我去USERPROFILE頁面和我的document.cookie鍵入console它顯示一個空字符串作爲結果。

我也試過res.cookie移動到登錄後,它不能正常工作...

請幫幫忙!

回答

1

無論您使用何種編程語言,您都無法在將響應標頭髮送到客戶端後修改Cookie。當致電res.render()時,它將標題與實際視圖一起發送。

HTTP cookie是發送到客戶端的標題的一部分。

嘗試在您的res.render()之前撥打res.cookie(),將響應發送給客戶端。

此外,在致電app.use(express.cookieParser('secret'));時,您通過提供'secret'參數來創建'簽名'cookie。
因此,改變餅乾的時候,你必須告訴表達你正在處理一個簽名餅乾這樣的:
res.cookie('name', 'test', {maxAge: 900000, httpOnly: true, signed: true});

你可以閱讀更多關於cookies的位置:http://www.nczonline.net/blog/2009/05/05/http-cookies-explained/

+0

該Cookie似乎仍留下一個空字符串,當我改變其位置之前渲染。 – Lion789

+0

它應該工作 - 我猜你在困擾你的方式上還有別的東西。編輯你的問題,以刪除與其他路線unnevessary代碼,並顯示我的app.js文件,而不是... – gillyb

+0

好吧,我更新了代碼。謝謝 – Lion789

相關問題