带有heroku的Socket.io:401“未经授权”

时间:2019-08-27 19:56:59

标签: node.js heroku socket.io

很抱歉,如果这个问题与我之前问过的另一个问题非常相似,我想在这里更具体,更清楚。

我尝试将某个应用程序与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

有解决这个未经授权的问题的主意吗?

0 个答案:

没有答案