繁体   English   中英

在node express中根据mysql数据库中的角色值实现用户角色

[英]implement user role based on role value in mysql database in node express

我面临一个问题,我想根据用户存储在数据库中的角色登录到屏幕后重定向用户,

所以我正在使用 react native 开发应用程序,我的后端服务器是 node express,我的数据库是 MySQL。 我已经实现了登录,它运行良好,在我的应用程序中,我有三个仪表板屏幕,一个用于管理员,一个用于学生,一个用于讲师,我想根据他的角色重定向用户登录,该角色已存储在表用户的数据库中:我的数据库表结构:

----------------------------
id : int 
----------------------------
username:  string 
----------------------------
password: string 
----------------------------
role: string 
---------------------------- 

以下是按下登录按钮时我的登录 function:

 login = () => {
  
    fetch('http://myip:3000/users', {
      method: 'POST',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        username: this.state.username,
        password: this.state.password,
      })
    })
      .then((response) => response.json())
      .then((res) => {
      
        if (res.success === true) {
          var role = AsyncStorage.getItem(role, res.user);

          if (role == 'admin') {

            AsyncStorage.setItem('admin', res.user);
            this.props.navigation.navigate('AdminD')
          } else if (role == 'lecturer') {

            AsyncStorage.setItem('lecturer', res.user);
            this.props.navigation.navigate('lecturerD')
          } else if (role == 'student') {

            AsyncStorage.setItem('student', res.user);
            this.props.navigation.navigate('studentD')
          }

        }
        else {

          alert(res.message);
        }
      })
      .done()

这里是处理这个请求的后端服务器代码:

 router.post('/', function (req, res, next) {
  //res.send({ message: req.body.username });
  var username = req.body.username;
  var password = req.body.password;
  var role = '';
  connection.query(
    "SELECT * FROM users WHERE username=? AND password =?",
    [username, password], function (err, row, field) {
      if (err) {
        console.log(err);
        res.send({ 'success': false, 'message': 'couldnt connect to db lol' });
      } else if (username === '') {
        res.send({ 'success': false, 'message': 'Username required' });
      } else if (password === '') {
        res.send({ 'success': false, 'message': 'password required' });
      } else if (row.length > 0) {
        connection.query("SELECT role FROM users WHERE username=? ", [username], function (err, row, field) {
          if (row[0].role === 'admin') {
            res.send({ 'success': true, 'admin': row[0].username });
          } else if (row[0].role === 'student') {
            res.send({ 'success': true, 'user': row[0].username });
            console.log(row[0].username)
          } else if (row[0].role === 'lecturer') {
            res.send({ 'success': true, 'lecturer': row[0].username });
          }
        });

      } else {
        res.send({ 'success': false, 'message': 'user not found' });
      }
    });
});

// 旁注:没有密码散列解密,因为这只是一个演示。

我可能有很多简单的错误,但我是初学者,对快速服务器请求做出本机反应,我希望有人能引导我找到解决方案。

感谢先进

感谢您为我设法解决此问题所做的一切,代码将如下所示

在服务器端,鳕鱼将如下所示:

router.post('/', function (req, res, next) {
  //res.send({ message: req.body.username });
  var username = req.body.username;
  var password = req.body.password;
  var role = '';
  connection.query(
    "SELECT * FROM users WHERE username=? AND password =?",
    [username, password], function (err, row, field) {
      if (err) {
        console.log(err);
        res.send({ 'success': false, 'message': 'couldnt connect to db lol' });
      } else if (username === '') {
        res.send({ 'success': false, 'message': 'Username required' });
      } else if (password === '') {
        res.send({ 'success': false, 'message': 'password required' });
      } else if (row.length > 0) {
        connection.query("SELECT role FROM users WHERE username=? ", [username], function (err, row, field) {
          if (row[0].role == 'admin') {
            res.send({ 'success': true, 'role': row[0].role, 'user': row[0].username });
          } else if (row[0].role == 'student') {
            res.send({ 'success': true, 'role': row[0].role, 'user': row[0].username });
            console.log(row[0].role)
          } else if (row[0].role == 'lecturer') {
            res.send({ 'success': true, 'role': row[0].role, 'user': row[0].username });
          }
        });



        //  res.send({ 'success': true, 'user': row[0].username });
      } else {
        res.send({ 'success': false, 'message': 'user not found' });
      }
    });
});

前端登录 function 将如下所示:

 login = () => {
  
    fetch('http://myip:3000/users', {
      method: 'POST',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        username: this.state.username,
        password: this.state.password,
      })
    })
      .then((response) => response.json())
      .then((res) => {
        // alert(res.message);
        if (res.success === true && res.role === 'admin') {
          AsyncStorage.setItem('user', res.user);
          this.props.navigation.navigate('AdminD')
        } else if (res.success === true && res.role === 'student') {
          AsyncStorage.setItem('user', res.user);
          this.props.navigation.navigate('studentD')
        } else if (res.success === true && res.role === 'lecturer') {
          AsyncStorage.setItem('user', res.user);
          this.props.navigation.navigate('lecturerD')
        }
        else {

          alert(res.message);
        }
      })
      .done()
  
  }
}

我希望这可以为某人节省数小时的痛苦:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM