【发布时间】:2014-01-29 20:03:13
【问题描述】:
我必须使用身份验证,然后为此创建一个会话,我有一个在 expressjs 上运行的 HTTPS 静态网站
代码:
app.js:
//created the https server
var express = require('express');
var https = require('https');
var http = require('http');
var fs = require('fs');
var mongo = require('mongodb');
var monk = require('monk');
var db = monk('localhost:27017/svgtest1');
// This line is from the Node.js HTTPS documentation.
var options = {
key: fs.readFileSync('privatekey.pem'),
cert: fs.readFileSync('certificate.pem')
};
// Create a service (the app object is just a callback).
var app = express();
app.use(express.static(__dirname + '/public'));
app.use(express.cookieParser());
app.use(express.session({cookie: { httpOnly: false , maxAge: 24*60*60*1000}, secret: '1234567890QWERT'}));
app.use(express.urlencoded());
app.use(express.json());
// middle ware to check auth
function checkAuth(req, res, next) {
if (!req.session.user_id) {
res.send('You are not authorized to view this page');
} else {
next();
}
}
app.get('/', function(req, res) {
console.log('First page called');
res.redirect('xyz.html');
res.end();
});
app.post('/login', function(req, res) {
console.log('login called');
var usrfield = req.body.usrfield;
var passfield = req.body.passfield;
// Play with the username and password
if (usrfield == 'xxx' && passfield == 'xxx') {
req.session.user_id = '123';
res.redirect('abc.html');
} else {
res.send('Bad user/pass');
}
console.log(usrfield);
console.log(passfield);
res.end();
});
// Create an HTTPS service.
https.createServer(options, app).listen(8888);
- 当我访问
https://localhost:8888时,它会不断加载页面,并且不会重定向到 xyz.html,我必须在其中输入凭据来验证用户身份? -
当我注释掉
app.use(express.session({cookie: { httpOnly: false , maxAge: 24*60*60*1000}, secret: '1234567890QWERT'}));
然后页面加载正确,但是当我将表单发布到 /login 时,它说 req.session 无法写入。为此我知道,因为我已经注释掉了 express.session,但奇怪的是创建了 connect.sid cookie。为什么 ?
我对问题 1 和 2 感到困惑。
【问题讨论】:
标签: javascript node.js session https express