【发布时间】:2019-03-14 02:55:15
【问题描述】:
在我开始使用 reactJS 之前,我使用 express 会话(当然是 expressJS)来确定用户是否经过身份验证,我的中间件在 /profile URL 中传递,就像这样 router.use('/profile', middleware, require('./profilePageFile')) 并且如果用户没有经过身份验证,我是用简单的代码重定向到登录页面
if(!req.session.user){
res.redirect('/login')
}
我也尝试将重定向与 react 一起使用,但由于 react 有它自己的路由系统 (react-router-dom),并且只有在我登录 /profile url 时创建 API 时才需要 express,它仍然向我显示页面内容和在 xxx 毫秒后重定向我,我认为如果我的个人资料页面和主页位于默认 url ('domain.com/') 上会更好,因为我看到许多网站都在使用这种技术,包括 Facebook,在我试图做这样的事情:如果用户没有令牌或令牌过期,不要显示一些“你好用户”按钮,否则显示它。我唯一的问题是我不知道该怎么做。 如果我在我的反应状态中有布尔值称为 isAuthenticated 或类似的东西,它根据我从服务器端发送的标头确定用户是否经过身份验证,我认为这对安全性来说是不好的做法,而且当我尝试那,它无论如何都不起作用。在这一点上,我唯一能做的就是如果令牌存在,则将 req.userId 传递给客户端。这行得通,但这还不够,如果有人明白了这一点,如果我得到帮助,我会很高兴 这是我的中间件代码
const guard = (req, res, next) => {
const token =
req.body.token ||
req.query.token ||
req.headers["x-access-token"] ||
req.cookies.token;
if (!token) {
res.status(401).send({ auth: false });
} else {
jwt.verify(token, process.env.SECRET, function(err, decoded) {
if (err) {
return res.status(500).send({
message: err.message
});
}
req.userId = decoded.id;
res.status(200).send({ auth: true });
next();
});
}
};
【问题讨论】:
-
除了发送 {auth:false} 还能做什么?
-
你具体要问什么?如何编写 JWT 检查中间件或如何在 React 中选择性地显示组件?
-
基本上是的。如何编写 JWT 检查中间件
-
你能帮我吗?
标签: node.js reactjs express jwt