使用角色和特定的用户id来限制在react/note/express/mysql中可以查看哪些部分



我正在使用MySQL、express、react、node创建一个web应用程序,这是我第一次使用JavaScript。我以前在用PHP做项目时使用过会话,在理解如何添加基于角色的访问或特定于特定用户的访问时遇到了困难。

我现在在前端的代码是:

export const login = user => {
return axios
.post('users/login', {
userName: user.userName,
password: user.password,
})
.then(res => {
localStorage.setItem('usertoken', res.data);
return res.data
})
.catch(err => {
console.log(err)
})
}; 

以及在后端。

// login
users.post('/login', (req, res) => {
User.findOne({
where: {
userName: req.body.userName
}
})
.then(user => {
if (bcrypt.compareSync(req.body.password, user.password)) {
let token = jwt.sign(user.dataValues, process.env.SECRET_KEY, {
expiresIn: 1440
})
res.json({
token: token
})
} else {
res.send('User doesnt exist')
}
})
.catch(err => {
res.send('error: ' + err)
})
});

当jwt令牌被发送回时,我将如何使用Express从MySQL数据库请求/返回用户类型/user_id?用户类型和user_id会存储在JWT的"usertoken"中并存储在本地存储器中吗?

当jwt令牌被发送回时,我将如何使用Express从MySQL数据库请求/返回用户类型/user_id?

if (bcrypt.compareSync(req.body.password, user.password)) {
// place your query here - use `username` as a key to get user row
// store results in user object, then:
let token = jwt.sign(user.dataValues, process.env.SECRET_KEY, {
expiresIn: 1440
})
res.json({
token: token
})

用户类型和user_id会存储在JWT的"usertoken"中并存储在本地存储中吗?

只要它不是敏感数据,你就安全了。请注意,由于加密,即使传递敏感数据,您也相对安全,但这不是一个好的做法(只将您必须返回的内容发送给存储在JWT中的用户(

我正在使用MySQL创建一个web应用程序,express,react,node,这是我第一次使用JavaScript

太棒了!欢迎使用现代堆栈开发:(

编辑:

我承认——我最初的回答可能令人困惑。所以:

  • 根据经验,永远不要(永远不要(在前端项目中编写sql查询(安全方面(
  • 后端应该根据数据库管理连接(在大多数情况下,每个数据库应该使用一个连接(
  • 使用查询数据库的Api条目扩展后端。允许这些条目接受查询参数和/或请求标头
  • 使用特定的查询参数调用api来查询数据库

在您的示例中,我只是使用您的login条目来放置您的查询。因为您使用的是mysql,请考虑使用第三方库来帮助您(如mysql2(

最终,它应该看起来像这样:

if (bcrypt.compareSync(req.body.password, user.password)) {
connection.query('SELECT * FROM `users` WHERE `name` = ?', ['user name to query' ], function(err, results) {
if (err) return res.send('error: ' + err)
let token = jwt.sign(user.dataValues, process.env.SECRET_KEY, {
expiresIn: 1440
})
res.json({
token: token
})

});

最新更新