Flask SocketIO通过发送令牌对连接事件进行身份验证

时间:2015-07-04 07:16:32

标签: python authentication flask-socketio

目前,在var path ="path of final pdf to save"; var imagePath="path of image that should be paste in final pdf file"; iTextSharp.text.Document document = new iTextSharp.text.Document(); PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(path, FileMode.Create)); iTextSharp.text.Image myImage = iTextSharp.text.Image.GetInstance(imagePath); myImage.ScaleAbsoluteHeight(document.PageSize.Height); myImage.ScaleAbsoluteWidth(document.PageSize.Width); myImage.Alignment = Element.ALIGN_CENTER; document.Add(myImage); document.Close(); 登录后,我使用user返回token。随后,他们必须向JSON页面发出请求,并通过index中的token

HTTP 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'}) 传递给上述token事件,以便我可以在那里验证用户。如果connect最终无效,我可以进行token来电。

或者,当我进行以下调用时,是否需要进行此操作?

disconnect

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

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'})