【问题标题】:Socket.io and authentication systemSocket.io 和认证系统
【发布时间】:2017-12-02 01:14:12
【问题描述】:

我有以下代码:

io.sockets.on('connection', function (socket) {

    socket.on('queue', function() {
        console.log(socket.request.headers.cookie);

    })
});

现在我的网站注册是通过 express 完成的,并且 https cookie 通过 express 添加到客户端的浏览器中。当有人想连接到我的游戏时,假设他需要发出一个“队列事件”。在那里,socket.io 将读取他的 cookie 并检查它们是否正确。

根据这个帖子: Can I access a cookie from Socket.io?

socket.request.headers.cookie

headers.cookie 是一个禁忌,尽管我真的不明白为什么。为什么 socket.io 会将他的 cookie 与其他人的实时生产混淆?我错过了什么?我怎样才能做到这一点?

【问题讨论】:

    标签: javascript node.js cookies socket.io


    【解决方案1】:

    如果您想使用 Socket.io 进行一些身份验证,最好的方法是使用握手。

    假设您已经通过身份验证,并且服务器向您发送了一个令牌

    客户端:

    let socket = io.connect(SERVER.socket, { query: 'token=' + token })
             .on('connect', data => {
                 console.log('Connected to the server');
             };
    

    服务器端正在套接字连接上运行中间件:

    const io = require('socket.io').listen(httpServer)
    
    // Checking for the token and handshaking with the client
    .use(require('socketio-jwt').authorize({
        secret: secretKey,
        handshake: true
    }))
    
    // Client successfully connected (token was valid)
    .on('connection', socket => {});
    

    一些很好的教程: https://auth0.com/blog/auth-with-socket-io/

    希望它能以某种方式帮助您。

    【讨论】:

    • 任何关于“client.request.headers.cookie”的线索都会导致竞争条件,因为 cookie 总是指向最后登录的用户。留言?
    猜你喜欢
    • 2020-05-13
    • 1970-01-01
    • 2011-06-12
    • 2014-12-14
    • 2011-04-16
    • 2012-06-30
    • 2011-10-25
    • 1970-01-01
    相关资源
    最近更新 更多