很抱歉,如果这个问题与我之前问过的另一个问题非常相似,我想在这里更具体,更清楚。
我尝试将某个应用程序与Heroku联机。在本地,一切正常,但是当我尝试将其放在网上时,我的聊天出现问题。我使用socket.io。 当我尝试访问聊天时,我的请求出现错误。 401“未经授权”
我尝试了一些我在互联网上发现的东西。我尝试的最后一件事是:
initSocket = ()=>{
let myHeaders = new Headers();
myHeaders.append("Content-type", "application/json");
myHeaders.append("Authorization", "Bearer "+localStorage.getItem('tokenJWT'));
const socket = io(socketUrl, {
transportOptions:{
polling: {
extraHeaders: {
Authorization: myHeaders
}
}
}
})
socket.on('connect', ()=>{
console.log("Chat Connected");
})
this.setState({socket})
}
但是我得到相同的结果:未经授权
这是我的security.js
const verifyJWTToken = require('../libs/auth').verifyToken;
const access_routes = ["/login_check", "/user", "/mail/send", "/landing-page", "/security/login", "/chat","/socket.io"]
const verifyToken = (req, res, next) => {
if(access_routes.indexOf(req.path) > -1) {
next();
} else {
const auth = req.get('Authorization');
if(!auth || !auth.startsWith('Bearer ')) {
res.sendStatus(401);
}
verifyJWTToken(auth.replace("Bearer ", ""))
.then((decodedToken) => {
req.user = decodedToken;
next();
})
.catch((error) => res.status(400).send({
error: "JWT TOKEN invalid",
details: error
}));
}
}
module.exports = {
verifyToken
}
我的auth.js
const jwt = require('jsonwebtoken');
const JWT_SECRET = "MaBelleJonquille";
const createToken = function (user = {}) {
return jwt.sign({
payload: {
userName: user.user_name
}
}, JWT_SECRET, {
expiresIn: "7d",
algorithm: "HS256"
});
};
const verifyToken = function (token) {
return new Promise((resolve, reject) => jwt.verify(token, JWT_SECRET, (err, decodedToken) => {
if(err || !decodedToken) {
reject(err);
}
resolve(decodedToken);
}));
};
//fonction pour hasher le password rentré
module.exports = {
createToken,
verifyToken
}
如果我忘记了某些内容,则指向我的github的链接:https://github.com/romainbor/eteach
有解决这个未经授权的问题的主意吗?