微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用 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 举报,一经查实,本站将立刻删除。