【发布时间】:2020-05-13 21:49:51
【问题描述】:
在 React 中,我发送如下数据和标头:
axios.post("http://localhost:3000/stockdata",{
// data
},{headers: {
'authorization': "Bearer "+LocalStorage.get('token'),
'Accept' : 'application/json',
'Content-Type': 'application/json'
}
})
在 Index.js 中 //需要所有模块
var stockDataRouter = require('./Routers/stockDataRouter')
app.use('/stockdata', authenticateToken, stockDataRouter)
app.route('/login')
.options(cors.corsWithOptions, (req,res)=>{ res.sendStatus(200)})
.post(cors.cors, (req, res, next) => {
console.log(req.header)
if(req.body.username==='admin' && req.body.password==='password'){
const user = {
username: req.body.username,
}
jwt.sign({user:user}, 'secretkey',(err, token)=>{
res.json({
token: token
})
})
}
else{
res.sendStatus(403)
}
})
function authenticateToken(req,res,next){
const bearerHeader = req.headers['authorization']
console.log(req.headers)
if(typeof bearerHeader !== 'undefined'){
const bearer = bearerHeader.split(' ');
const bearerToken = bearer[1];
req.token = bearerToken;
next();
}
else{
console.log('hihihi')
res.sendStatus(403);
}
}
如果请求有令牌,那么它不会进入 else 部分,我可以访问 stockdata 端点。但即使我正确地传递了令牌,正如您在 chrome 开发工具中看到的那样。为什么它没有反映在后端。
req.headers 没有授权。
在chrome dev tools中我们可以清楚的看到Token
如何解决?
【问题讨论】:
-
检查来自
LocalStorage.get('token')的返回值 - 它可能未定义并被代理删除。 -
很可能
LocalStorage没有token -
LocalStorage.get('token') 正在返回一个令牌。
-
您正在拆分
bearerHeader,这意味着您需要像'authorization': "Bearer " + LocalStorage.get('token'),一样从客户端传递它 -
即使我这样做了,我也无法在我的后端收到它。如果我这样做 console.log(req.headers) 我无法在我的后端获得该令牌