【发布时间】:2021-04-10 10:28:08
【问题描述】:
我遇到了一个问题,我想根据用户存储在数据库中的角色在登录到屏幕后重定向用户,
所以我正在使用 react native 开发应用程序,我的后端服务器是 node express,我的数据库是 MySQL。 我已经实现了登录,它运行良好,在我的应用程序中,我有三个仪表板屏幕,一个用于管理员,一个用于学生,一个用于讲师,我想根据他的角色重定向用户登录,该角色已存储在表用户的数据库中: 我的数据库表结构:
----------------------------
id : int
----------------------------
username: string
----------------------------
password: string
----------------------------
role: string
----------------------------
以下是我按下登录按钮时的登录功能:
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' });
}
});
});
// 旁注:没有密码哈希解密,因为这只是一个演示。
我可能有很多简单的错误,但我是初学者,无法通过快速服务器请求做出本机反应, 我希望有人能引导我找到解决方案。
提前致谢
【问题讨论】:
-
为什么不直接在响应中发回用户角色?或者更好的是,发回一个密钥,让服务器根据角色管理允许或不允许哪些请求。这似乎为客户端提供了对其角色的控制权。
-
@Pogrindis 我可以举例说明如何做到这一点
标签: mysql node.js react-native express