我正试图建立一个认证系统,我有一个应用程序。js
var express = require('express')
, MemoryStore = require('express').session.MemoryStore
, app = express();
app.use(express.cookieParser());
app.use(express.session({ secret: 'keyboard cat', store: new MemoryStore({ reapInterval: 60000 * 10 })}));
app.use(app.router);
还有路线。索引为
var express = require('express')
, mysql = require('mysql')
, crypto = require('crypto')
, app = module.exports = express();
app.get('/*',function(req,res){
var url = req.url.split('/');
if (url[1] == 'favicon.ico')
return;
if (!req.session.user) {
if (url.length == 4 && url[1] == 'login') {
var connection = mysql.createConnection({
host : 'localhost',
user : 'user',
password : 'pass',
});
var result = null;
connection.connect();
connection.query('use database');
var word = url[3];
var password = crypto.createHash('md5').update(word).digest("hex");
connection.query('SELECT id,level FROM users WHERE email = "'+url[2]+'" AND password = "'+password+'"', function(err, rows, fields) {
if (err) throw err;
for (i in rows) {
result = rows[i].level;
}
req.session.user = result;
});
connection.end();
}
}
console.log(req.session.user)
当我访问http://mydomain.com/login/user/pass第一次显示在最后一次控制台调用中,但第二次访问时,cookie是干净的
为什么不直接使用Express的会话处理?如果您使用Express命令行工具作为Express--session
,它将创建带有会话支持的项目模板。从那里,您可以将会话行复制到当前项目中。有更多信息在会话如何工作在Express.js与Node.js?(这看起来像它可能是一个副本)
至于清理你的SQL,你似乎在使用库,如果你使用参数化查询(即?占位符)。
最后一件事,您使用的Express是错误的(没有冒犯)。Express的路由器将允许您分割许多路由(同时允许您配置favicon。请参阅无法使用Express.js更改favicon(第二个答案)。使用“/*”路由只会捕获所有GET请求,这大大限制了路由器可以为您做的事情。
(从注释中继续;把它放在这里的代码块)现在你有了一个带有会话支持的应用程序,尝试以下两种途径:
app.get('/makesession', function (req, res) {
req.session.message = 'Hello world';
res.end('Created session with message : Hello world');
});
app.get('/getsession', function (req, res) {
if (typeof req.session.message == 'undefined') {
res.end('No session');
} else {
res.end('Session message: '+req.session.message);
}
});
如果您在浏览器中导航到/makesession,它将设置会话消息并通知您已设置会话消息。现在,如果导航到/getsession,它将返回会话消息(如果存在),否则它将告诉您会话不存在。
您需要在响应对象中保存cookie值:
res.cookie('session', 'user', result);
http://expressjs.com/api.html#res.cookie