2013-08-29 44 views
2

你能帮我创建Cookie,因为我无法使它工作。我想在用户登录后设置并创建cookie,但我不知道我的代码有什么问题。多谢你们。NodeJs和ExpressJs不能设置Cookie

这是我的代码,如果你认为还有其他错误或代码更正,你能帮我修复吗?多谢你们。 :)

app.js

//deps 

var express = require('express'); 
var app = express(); 
var redis = require('redis'); 
var client = redis.createClient(); 


var delcookie = function(req, res) { res.clearCookie('login_token'); res.redirect('/');  }; 
var setcookie = function(req, res) { res.cookie('login_token', +new Date(), { maxAge: 3600000, path: '/' }); res.redirect('/'); }; 

//configs 
app.use(express.bodyParser()); 
app.use(express.cookieParser()); 
app.use(app.router); 

client.on('error', function (err) { 
console.log('Error: ' + client.host + ':' + client.port + ' - ' + err); 
}); 

app.get('/', function (req, res) { 
res.sendfile(__dirname + '/index.html'); 
}); 

app.get('/login/', function (req, res) { 
res.sendfile(__dirname + '/login.html'); 
}); 

app.get('/register/', function (req, res) { 
res.sendfile(__dirname + '/register.html'); 
}); 

app.get('/restricted/', function (req, res) { 
res.sendfile(__dirname + '/restricted.html'); 
}); 

app.get('/logout/', delcookie, function (req, res) { 
res.sendfile(__dirname + '/logout.html'); 
}); 

//post 

app.post('/login/', function (req, res) { 
//res.sendfile(__dirname + '/restricted.html'); 
client.hmget(req.body.user.username, 'password', function (err,pass) { 
if ((!err) && pass && pass == req.body.user.password){ 
    res.redirect('/restricted/', setcookie); 
    } else if (pass == false) { 
    res.redirect('/register/'); 
    } else { 
    res.redirect('/login/'); 
    } 
    }); 
}); 

app.post('/register/', function (req, res) {  
client.hmset(req.body.user.username, 'password',req.body.user.password, 
'fname',req.body.user.fname, 'lname', req.body.user.lname, 
'password', req.body.user.password, 'email', req.body.user.email, 
'mobile', req.body.user.mobile, redis.print); 
res.write('Successfully Registered'); 
}); 

app.listen(80); 

回答

1

使用cookie,你应该看看快递cookieSession中间件。该文档是在这里:

您可以与您的Cookie添加cookieSession中间件和指定设置:http://expressjs.com/api.html#cookieSession

更新(我现在不能,所以这是从我的记忆测试)是这样的:

app.use(express.cookieSession({ 
    cookie: { 
     path: '/', 
     maxAge: 3600000 
    } 
})); 

然后当你的用户登录可以req.session.login_token = 'login_token';设置登录令牌上的会话。

当您的用户注销时,您可以通过执行来清除会话。

在您的身份验证中间件中,您可以检查是否在会话上设置了登录标记以查看用户是否已通过身份验证。

+0

我已经读过-_-,但我仍然不知道如何使它工作Brett。 –

+0

更新了我的答案。希望能帮助到你。 – Brett

+0

谢谢布雷特:)它的工作! :) –