mysql - 登录用户时奇怪的nodejs行为
问题描述
问题是它显示它在没有重定向代码的情况下成功登录(201),但是使用它,它显示302错误并且email_address未定义。这里可能是什么问题?我仍然无法得出结论。
问题可能是我猜的代码顺序?
const login = async (req, res, next) => {
const { email_address, password, user_email, user_password}: { email_address: string, password: string, user_email: string, user_password: string } = req.body;
try {
const userWithDetails = 'SELECT * FROM users WHERE email_address = user_email AND password = user_password'; //w form info
if (userWithDetails) {
req.session.loggedin = true; //true
req.session.email_address = email_address; //undefined
console.log(req.session.email_address)
// return res.redirect('./index.html')
}
res.status(201).send('Succesfully signed in');
// res.status(403).send('Password is not correct');
} catch(error) {
res.status(404).send(`User with email ${email_address} not found!`);
}
await next;
};
新代码***
const login = async (req, res, next) => {
const { email_address, password}: { email_address: string, password: string} = req.body;
const userWithDetails = 'SELECT * FROM users WHERE email_address = ?';
return con.query(userWithDetails, email_address, (err, results) => {
if (err) {
console.error(err);
}
const user = results.find(emailObj => emailObj.email_address === email_address);
if (results && results.length && user.email_address) {
req.session.loggedin = true;
req.session.email_address = email_address;
const matchPassword: boolean = bcrypt.compareSync(password, user.password);
if (matchPassword) {
const token = jwt.sign({ user }, 'aaaa', { expiresIn: '1h'});
res.status(200).send({message: 'Logged in', token: token});
} else {
res.status(403).send('Password is not correct');
}
} else {
res.status(404).send(`User with email ${email_address} not found!`);
}
});
await next;
}
解决方案
您不会在任何时候执行您的 sql 查询。
你只是说:
query = 'select blabla'
if(query){...}
当然,这将永远是正确的。您想在您的数据库上运行查询。
同样在您的查询中,您没有正确使用变量,请参阅字符串格式:
let my_var = `SELECT xxx from xxx where username = '${username}'`
还请清理参数以防止 SQL 注入...
推荐阅读
- matlab - 从matlab中的表中每n行提取x行
- python - ArcGIS python代码将路径更改为所有子目录的相对路径
- .net-core-3.1 - Asp.Net Core 3.1 App设置错误的runtimeOptions
- tableau-api - Tableau 模式中的正则表达式
- python - 在python中查找重复的元组
- angular - 如何将故事书安装到有角度的路线?
- neo4j - Neo4j Cypher:无法定义与重复记录的关系
- google-apps-script - 在 Google Web 中心验证 Google Cloud 功能
- python - python get() 函数为 str 类和类型 str/class int 和 int 类型提供不同的值
- python - 添加偏差后的模型过拟合