javascript - 如何使用 MySQL 使用 ReactJS、NodeJS 登录?
问题描述
我是 ReactJS 的初学者开发人员,我想使用 ReactJS、NodeJS 和 MySQL 登录我的表单。
我的班级登录如下:
handleClick(event){
var self = this;
var payload={
"username":this.state.username,
"password":this.state.password
}
axios({
method: 'post',
url: '/app/login/',
data: payload,
withCredentials: true,
headers: {
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/json',
'Accept': 'application/json',
}
})
.then(function (response) {
console.log(response);
if(response.data.code == 200){
this.props.history.push("http://localhost:5000/brillo#/");
}
else{
swal("Erreur !", "Erreur !", "error");
}
})
.catch(function (error) {
console.log(error);
});
}
handleredirect(){
this.props.history.push("/register");
}
render() {
return (
<div className="app flex-row align-items-center">
<Form method="POST" >
<InputGroup className="mb-3">
<Input type="text" placeholder="Username" autoComplete="username" value={this.state.username} onChange={e => this.setState({ username: e.target.value })} required/>
</InputGroup>
<InputGroup className="mb-4">
<Input type="password" value={this.state.password} placeholder="Password" onChange={e => this.setState({password: e.target.value })} autoComplete="current-password" required/>
</InputGroup>
<Row>
<Col xs="6">
<Button type="button" color="primary" className="px-4" onClick={(event) => this.handleClick(event)}>Login</Button>
</Col>
<Col xs="6" className="text-right">
<Button color="link" className="px-0">Forgot password?</Button>
</Col>
</Row>
</Form>
</div>
);
}
}
export default Login;
我的路由器:
exports.login = function(req,res){
var email= req.body.email;
var password = req.body.password;
var username = req.params.username;
connection.query('SELECT * FROM users WHERE username = ?',[username], function (error, results, fields) {
if (error) {
res.send({
"code":400,
"failed":"error ocurred"
})
}else{
if(results.length >0){
bcrypt.compare(password, results[0].password, function(err, doesMatch){
if (doesMatch){
res.send({
"code":200,
"success":"login sucessfull"
});
}else{
res.send({
"code":204,
"success":"Email and password does not match"
});
}
});
}
else{
res.send({
"code":204,
"success":"Email does not exits"
});
}
}
});
}
当我通过 Postman 运行我的后端时,http://localhost:4000/app/login/
我得到:
{
"code": 204,
"success": "Email does not exits"
}
但是我使用我在注册表单上提交的用户名和密码发布,当我运行我的前端时,我得到:
{data: {…}, status: 200, statusText: "OK", headers: {…}, config: {…}, …}
config:
{
data:
code:204
success:"Email does not exits"
我希望当我单击登录按钮时,它将被重定向到仪表板页面。
我该如何解决?
解决方案
您的 nodejs 路由器似乎不正确,您从正文电子邮件、密码、用户名中获取,但电子邮件不是通过反应发送的。那么您在数据库、电子邮件或用户名中寻找什么?
下一个
connection.query('SELECT * FROM users WHERE username = ?',[username], function...
我认为它应该更像:
connection.query('SELECT * FROM users WHERE username = \'' + username + '\'', function...
顺便说一句,您的回答不正确:您应该返回:
return res.status(500).json({ failed: 'error ocurred'})
并不是
res.send({"code":400,"failed":"error ocurred"})
推荐阅读
- c++ - 快速选择算法的最小 kth
- .net - 为什么我不能查询其他用户的2FA注册详情?
- neural-network - 如何在进行分割增强的同时更改图像和地面实况图像的数据层?
- javascript - Discord - 如何授予我的机器人权限。[Javascript]
- email - List-Unsubscribe 标头在 gmail 中不显示取消订阅链接
- java - Spring Boot 模拟对象在调用时返回 null
- ruby-on-rails - 为什么'ancestors.include'时'class'会显示'Class'?类'是'假'?
- php - 被返回 ORA-25408: 不能安全地重播调用
- solidity - 使用 ecrecover 功能 - Solidity
- boolean-logic - 分辨率变量消除是否会修改其他变量的解?