待办应用登录页验证失效求助:任意账号均可无限制登录
登录验证逻辑错误导致无限制访问的解决方案
核心问题分析
你的后端登录接口逻辑存在致命错误:当执行db.query后,无论是否查询到匹配的用户,data都会是一个数组(哪怕是空数组)。而在JavaScript中,空数组属于真值(truthy),所以else if(data)的判断永远为真,导致无论输入是否正确,都会返回"login successful"。
修正后的后端代码
app.post('/login', (req, res) => { const sql = "SELECT * FROM user_details WHERE `email`= ? AND `password`= ?"; db.query(sql, [req.body.email, req.body.password], (err, data) => { if(err) { return res.json(err); } // 只有查询到至少一条匹配记录时,才判定登录成功 else if(data.length > 0) { return res.json("login successful"); } else { return res.json("login failed"); } }) })
额外注意事项
- 密码安全问题:当前代码中密码是明文存储在数据库中的,这是严重的安全隐患。建议使用
bcrypt等库对密码进行哈希加密后再存储,验证时也需要对输入的密码进行哈希比对,而不是直接明文匹配。 - 前端状态更新异步问题:前端
handleSubmit中,调用setErrors(validation(values))后立即判断errors的值,由于setErrors是异步更新状态的,此时的errors可能还是更新前的旧值。可以改成在validation函数直接返回结果,再基于结果判断是否发起请求。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

