![](/img/trans.png)
[英]Session Node.js + Passport.js + Redis, Store session by user.id
[英]Node Js Session user id
您好,我是Node.js的新手,目前正在進行會話登錄。
為什么不能在查詢函數中設置會話?
為什么我需要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);
Quentin是正確的,您應該注意sql注入。 對於節點,通常根據您使用的SQL庫來執行類似的操作。
client.query(
"Select id FROM users Where username = ? AND password = ?", [req.body.username, req.body.password],
function(err, result) {
// Your code
}
至於為什么您必須在重新加載頁面后刷新頁面,我的猜測與完成的功能有關,因為我不知道它在代碼中的作用。 我不知道為什么需要調用保存,在我的示例中沒有必要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.