节点 Js 会话用户 ID



您好,我只是 Node 的新手.js目前正在进行会话登录。

  1. 为什么我无法在查询函数中设置会话?

  2. 为什么我需要req.session.save()来保存它,但是重定向到某些页面会话后,它仍未完全设置,并且页面需要刷新以显示会话。

这是我设置会话的功能

client.query(
"Select id FROM users Where username = '" + req.body.username + "' AND password = '" + req.body.password + "'",
function(err, result) {
if (err) {
return console.error('error running query', err);
} else {
done();
req.session.user_id = result.rows;
req.session.save();
res.redirect('/wall');
}
});

您可能希望简化示例并阐明正在使用的库。我假设您正在使用快速会话和快速会话。我设置了一个简单的示例,当您转到/login?username=yourname 页面时,它会将您重定向到显示您姓名的其他页面。

var app = require('express')();
var http = require('http').Server(app);
var session = require('express-session');
var mysql = require('mysql')
app.use(session({secret: 'super secret'}));
var client = mysql.createConnection({
host: "My",
user: "private",
password: "configuration",
database: "my_db"
});
app.get('/login', function(req, res, next) {
var sessionData = req.session;
client.query('SELECT * from users where username = ?', [req.query.username], function(err, rows) {
if(err) throw err;
if (rows.length) {
var user = rows[0]
req.session.username = user.username;
req.session.user_id = user.id
res.redirect('/signed_in');
} else {
res.send("user not found")
}
})
})
app.get('/signed_in', function(req, res){
res.send(req.session.user_id + "," + req.session.username);
});
http.listen(3000);

昆汀是对的,你应该注意SQL注入。 在 Node 的情况下,您通常会执行类似操作,具体取决于您使用的 SQL 库。

client.query(
"Select id FROM users Where username = ? AND password = ?", [req.body.username, req.body.password],
function(err, result) {
// Your code
}

至于为什么您必须在重新加载页面后刷新页面,我的猜测与 done 函数有关,因为我不知道它在您的代码中做了什么。我不知道为什么你需要调用 save,在我的示例中没有必要。

最新更新