[英]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.