Python 烧瓶罐';与Eventlet一起使用时,无法访问@socketio.on下的Cookie
我正在使用Eventlet来执行一些后台Python 烧瓶罐';与Eventlet一起使用时,无法访问@socketio.on下的Cookie,python,cookies,flask,eventlet,Python,Cookies,Flask,Eventlet,我正在使用Eventlet来执行一些后台发出进程,但自从开始使用Eventlet以来,在@socketio.下的每个处理程序下,上的请求变量并没有按预期工作。例如,在普通的@APP.route('/abc/')下,我可以使用request.cookies.get('csrf'),等等。但是在@socketio.on下,request就不一样了request.cookies.get(“…”)每次都返回None import json import os import time import eve
发出
进程,但自从开始使用Eventlet以来,在@socketio.下的每个处理程序下,
上的请求
变量并没有按预期工作。例如,在普通的@APP.route('/abc/')
下,我可以使用request.cookies.get('csrf')
,等等。但是在@socketio.on
下,request
就不一样了request.cookies.get(“…”)
每次都返回None
import json
import os
import time
import eventlet
import gamble
import eng_puzzle
import authentication
import gcaptchacheck
from flask import Flask, redirect, url_for, request, render_template, make_response
from flask_compress import Compress
from flask_socketio import SocketIO, send, emit
from flask_sslify import SSLify
from store import REDISDB
eventlet.monkey_patch()
这些是进口货
def bg_emit():
"""Background emit"""
currentpotinfo = json.loads(REDISDB.get('potinfo').decode('UTF-8'))
pot_info = {
'id': currentpotinfo['id'],
'endtime': currentpotinfo['starttime'] + 30 - int(time.time()),
'hashwin': currentpotinfo['hashwin'],
'message': 'Entries closing in: ',
'winner': 'Not yet chosen'
}
socketio.emit('infoupdate', {'info': pot_info}, broadcast=True)
背景发射功能(上图)
如何称呼它(如上)
定义APP
和socketio
(如上)
服务器是如何运行的。除之外的仅用于部署。(上文)
有麻烦的地方之一<代码>身份验证
是用于站点范围内身份验证的自定义脚本。有调试消息,它们证明每次调用cookie时都返回None
。我怎样才能避开这个问题?问题本身有解决办法吗?还是我必须自己解决问题?我只是将auth cookie附加到请求正文中。该网站使用https/HST,所以这不是一个问题(我认为)。不过可能不是最好的解决方案……为了记录在案,我只是将auth cookie附加到请求主体。该网站使用https/HST,所以这不是一个问题(我认为)。也许不是最好的解决方案。。。
def testemit():
"""test"""
while True:
bg_emit()
eventlet.sleep(1)
APP = Flask(__name__)
Compress(APP)
socketio = SocketIO(APP)
if __name__ == '__main__':
print('RUN')
eventlet.spawn(testemit)
try:
socketio.run(APP, port=80, debug=True)
except PermissionError:
HPORT = int(os.environ.get('PORT'))
socketio.run(APP, port=HPORT, debug=False)
@socketio.on('pot')
def handle_message(message):
"""Handle messages"""
print(message)
user = authentication.checksession(request)
print('user', user)
print(request.cookies.get('csrf'))
if user and request.cookies.get('csrf') == message.get('csrf'):