我正在尝试构建一个auth系统,我有app.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);
和route.index为
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是干净的
答案 0 :(得分:2)
为什么不只是使用Express的会话处理?如果您使用快速命令行工具express --sessions
,它将创建具有会话支持的项目模板。从那里,您可以将会话行复制到当前项目中。 How do sessions work in Express.js with Node.js?中有更多信息(看起来可能是重复的)
至于清理SQL,您似乎正在使用该库,如果您使用参数化查询(即,占位符),它将会限制您的输入。
最后,你使用Express错误(没有冒犯)。 Express的路由器将允许您分割很多路线(以及允许您配置favicon。请参阅Unable to Change Favicon with Express.js(第二个答案)。 使用'/ *'路由只会捕获所有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,它将返回会话消息(如果存在),否则它将告诉您该会话不存在。
答案 1 :(得分:0)
您需要在响应对象中保存您的Cookie值:
res.cookie('session', 'user', result);