首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用MySQL登录ReactJS和NodeJS?

如何使用MySQL登录ReactJS和NodeJS?
EN

Stack Overflow用户
提问于 2018-08-30 05:34:41
回答 1查看 1.3K关注 0票数 2

我是一个初学者在ReactJS上开发,我想在我的表单中使用ReactJS,NodeJS和MySQL。

我的班级登录如下:

代码语言:javascript
复制
     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;

我的路由器:

代码语言:javascript
复制
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"
          });
    }
  }
  });

}

当我通过发布http://localhost:4000/app/login/来运行Postman的后端时,我得到:

代码语言:javascript
复制
{
    "code": 204,
    "success": "Email does not exits"
}

但是我在注册表上提交了用户名和密码,当我运行我的前端时,我得到:

代码语言:javascript
复制
{data: {…}, status: 200, statusText: "OK", headers: {…}, config: {…}, …}
config:
{
data:
code:204
success:"Email does not exits"

我希望当我点击登录按钮时,它将被重定向到仪表板页面。

我怎么解决它呢?

EN

回答 1

Stack Overflow用户

发布于 2018-08-30 06:02:10

您的nodejs路由器似乎不正确,您从正文中获取了电子邮件、密码、用户名,但电子邮件不是由react发送的。那么你在你的数据库中寻找什么,电子邮件或用户名?

下一位

代码语言:javascript
复制
connection.query('SELECT * FROM users WHERE username = ?',[username], function...

我觉得应该更像这样:

代码语言:javascript
复制
connection.query('SELECT * FROM users WHERE username = \'' + username + '\'', function...

顺便说一下,您的响应是不正确的:您应该返回:

代码语言:javascript
复制
return res.status(500).json({ failed: 'error ocurred'})

而不是

代码语言:javascript
复制
res.send({"code":400,"failed":"error ocurred"})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52086381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档