2

目前在user登录后,我返回一个tokenusing JSON。随后,他们必须向index页面发出请求并tokenHTTP Authorisation header.

index.html页面包含以下内容:

var socket = io.connect('http://' + document.domain + ':' + location.port + namespace);

socket.on('connect', function() {          
          socket.emit('join', {room: 'venue_1'}); 
});  

如果user遵循这个事件过程,那么socket只有在它们之后才有可能连接到login。但是,我试图防止有人可能只是创建一个html包含上述代码的文件而不首先执行该login步骤的情况。

服务器代码

@socketio.on('connect', namespace='/test')
def test_connect():

    # Can anything be done here to verify a user?

    emit('my response', {'data': 'Connected'})

有没有办法可以将 a 传递token给上述connect事件,以便在那里验证用户。如果token最终无效,我可能会disconnect打电话。

或者当我进行以下调用时是否需要发生这种情况?

socket.emit('join', {room: 'venue_1', token:'token1234'}); 

谢谢你的帮助。

4

1 回答 1

5

Flask-SocketIO 的文档包括关于Authentication的部分。

该解决方案基于 SocketIO 处理程序内的 HTTP 上下文(用户会话和 cookie)的可用性。如果您使用 Flask-Login 来管理用户会话,那么current_user上下文变量在您的套接字处理程序中可用。例如:

@socketio.on('connect', namespace='/test')
def test_connect():
    if not current_user.is_authenticated()
        return  # do not respond or disconnect
    # user is authenticated
    emit('my response', {'data': 'Connected'})
于 2015-07-04T18:41:21.367 回答