Hig*_*ler 2 python websocket flask
我已经安装了Flask-Login和Flask-Sockets.当我尝试获取当前用户时(使用g.user),他们两个都工作得很好,我得到了一个AttributeError: '_AppCtxGlobals' object has no attribute 'user'
@sockets.route('/echo')
def echo_socket(ws):
with app.app_context():
user = current_user #This causes problems, just like basically anything else that uses something that is not provided in this function
while True:
message = ws.receive()
ws.send("lol")
Run Code Online (Sandbox Code Playgroud)
我仍然是Flask的新人,任何帮助都会受到超级赞赏.
问题是您将套接字函数视为常规请求,而不是它们.
在常规(即非套接字)情况下,客户端向服务器发送请求.每个请求都包含一个由Flask-Login在登录时设置的cookie.此cookie包含登录的用户.Flask-Login有一个before_request处理程序,它读取此cookie,加载用户然后公开它current_user,这样,当您的函数运行时,您可以访问此信息.
套接字连接与上面的不一样.对于套接字连接,客户端打开到路由的套接字,并与服务器建立永久连接.这里不存在请求的概念,它只是两台机器使用自己的协议发送和接收数据.因为没有HTTP请求,所以也没有cookie,没有before_request处理程序,没有推送应用程序和请求上下文,也没有current_user来自Flask-Login.套接字路由实际上在Flask应用程序之外运行.
如果您需要了解用户,您需要让客户端通过套接字接口发送凭据,并且您需要自己在套接字路由中验证这些凭据,因为Flask-Login无法在套接字环境中工作,因为缺少请求,cookie等.套接字和常规路由之间的显着区别在于套接字连接是永久性的,因此您只需在建立连接时对用户进行身份验证.
我希望这有帮助.对不起,我没有快速简便的解决方案.
| 归档时间: |
|
| 查看次数: |
589 次 |
| 最近记录: |