使用 uwsgi 提供的 Flask 不会在每个请求上保留会话值

问题描述

我有一个运行 uWSGI 的 Flask 服务器。 Flask 会话在服务器端实现,会话将保存一个唯一的用户 ID 和用户名字典。我可以登录,但是当它到达主页时,它将再次重定向到登录页面,因为会话对象为空。

这些烧瓶端点是使用 axios 从 reactjs 调用的。 React 与 nginx 一起服务

这里是登录的代码(validate_user是一个函数,返回true是用户有效)

@app.route('/login',methods=['POST'])
def login():
user_details = request.get_json()
username = user_details['user']
password = user_details['password']
if validate_user(username,password) is True:
  user_id = str(uuid.uuid4())
  user_response = {
        "username": current_user,"id": str(user_id)}
  session['user'] = user_response
  response = app.response_class(response=json.dumps(user_response),status=200,mimetype='application/json')

这是主页的代码

@app.route('/container/csi',methods=['GET'])
@login_required
def get_csi_data():
  print("Get CSI data")

@login_required 是一个包装函数

def login_required(function_to_protect):
@wraps(function_to_protect)
def wrapper(*args,**kwargs):
    user_id = session.get('user')
    print("user id:",user_id)
    if user_id is None:
        user_response = {"error": "Not authorized,login to continue"}
        response = app.response_class(response=json.dumps(user_response),status=401,mimetype='application/json')
        return response
    else:
        return function_to_protect(*args,**kwargs)
return wrapper

我还使用了许多不同答案中所述的静态 secret_key

app.secret_key = "1234"

这里是 uWSGi 配置文件 (server.ini)

[uwsgi]
module = wsgi:app

master = true
processes = 5

socket = server.sock
https = 0.0.0.0:5000,/path/to/cert,/path/to/key
chmod-socket = 660
vacuum = true

die-on-term = true

启动服务器如下

uwsgi --ini server.ini

观察

我首先看到“OPTIONS”请求和主页的“GET”请求。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...