gpt4 book ai didi

express - 如何存储 JWT 并使用 React 将它们与每个请求一起发送

转载 作者:行者123 更新时间:2023-12-03 13:12:23 25 4
gpt4 key购买 nike

很高兴知道,因为我的基本注册/身份验证系统正在运行。

所以基本上我得到了这个:

app.post('/login', function(req,res) {
Users.findOne({
email: req.body.email
}, function(err, user) {
if(err) throw err;

if(!user) {
res.send({success: false, message: 'Authentication Failed, User not found.'});
} else {
//Check passwords
checkingPassword(req.body.password, user.password, function(err, isMatch) {
if(isMatch && !err) {
//Create token
var token = jwt.sign(user,db.secret, {
expiresIn: 1008000
});
res.json({success: true, jwtToken: "JWT "+token});
} else {
res.json({success: false, message: 'Authentication failed, wrong password buddy'});

}
});
}
});
});

然后,每当我发送带有 jwt header 的 get 请求时,我都会使用 POSTMAN 保护我的/admin 路由,一切都运行良好。

现在这是棘手的部分,基本上,当我要登录时,如果成功,则将我重定向到管理页面,每次我尝试访问 admin/* 路由时,我想将我的 jwToken 发送到服务器,但是问题是,我该如何实现这一目标?我没有使用 redux/flux,只是使用react/react-router。

我不知道这个机制是如何工作的。

谢谢大家

最佳答案

不要将 token 存储在 localStorage 中, token 可能会被 xss 攻击破坏。我认为最好的解决方案是在登录操作时向客户端提供访问 token 和刷新 token 。将访问 token 保存在内存中(例如 redux 状态),并且应该使用 httpOnly 标志(如果可能的话,还可以使用 secure 标志)在服务器上创建刷新 token 。访问 token 应设置为每 2-3 分钟过期一次。为了确保用户不必每 2-3 分钟输入一次凭据,我有一个时间间隔,在当前 token 过期之前调用 /refreshToken 端点(静默刷新 token )。

这样,访问 token 就不会被 xss/csrf 破坏。但使用 xss 攻击,攻击者可以代表您对 /refreshToken 端点进行调用,但这不会造成危害,因为返回的 token 不会被泄露。

关于express - 如何存储 JWT 并使用 React 将它们与每个请求一起发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39176237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com