首页 > 解决方案 > 使用 nodejs axios/fetch 时,Flask 会话不持久化数据

问题描述

我有一个 server.js 用于从我的烧瓶服务器获取数据。我在我的烧瓶应用程序中使用会话来保存用户登录信息。如果我使用邮递员,一切都会完美运行。但是,使用 server.js 获取数据会导致烧瓶会话重置每个请求。

例如,如果我登录并且在 sign_in() 中打印的会话是<SecureCookieSession {'user': 'admin'}>. 紧接着,当调用 user_info() 时,打印的会话为空,打印内容为<SecureCookieSession {}>. 似乎它为每个请求创建了一个新会话。谁能帮我弄清楚如何解决这个问题?感谢所有的帮助!

服务器.js:

const express = require('express');
const path = require('path');
const cors = require('cors');
const fetch = require('node-fetch');
const axios = require('axios');

const app = express();

const proxy = 'http://0.0.0.0:5000';
app.use(cors());
app.use(express.json());
app.use(express.static(path.join(__dirname, '.', 'build')));

app.get('/user', function(req,res) {    
    axios.get(proxy + '/user',{ withCredentials: true })
    .then((response) => res.json(response.data));   
});

app.post('/login', function(req,res) {
    let body = req.body;
    axios.post(proxy + '/login', body, { withCredentials: true })
    .then((response) => res.json(response.data));   
});

app.get('/*', (req, res) => {
    res.sendFile(path.join(__dirname, '.', 'build', 'index.html'));
});

app.listen(8080);

应用程序.py:

from flask import Flask, request, json, session, jsonify
from api import driver
from flask_cors import CORS


def create_app(db_url="init"):
    app = Flask(__name__)
    app.secret_key = "asfsdfsdfdsfsa"
    app.SESSION_TYPE = 'filesystem'

    driver = driver()
    CORS(app)

    @app.route('/login', methods=['POST'])
    def sign_in():
        request_data = json.loads(request.data)
        ret = driver.login(request_data)

        if ret["valid"]:
            session["user"] = request_data["username"]

        ret = jsonify(ret)
        return ret

    @app.route('/user', methods=['GET'])
    def user_info():
        ret = {"valid": False}
        if "user" in session:
            ret = driver.get_user_info(session["user"])
        ret = jsonify(ret)
        return ret

    return app

迄今为止的尝试:

  1. 我尝试使用flask_cors,仍然无法正常工作。
  2. 我为我的前端尝试了 axios 和 fetch 。使用 fetch 时,我添加了 'credentials': 'include'。还是不行。
  3. 试图添加@cross_login。不工作。
  4. 试图设置supports_credentials=True,不起作用。

标签: node.jsexpressflaskaxios

解决方案


推荐阅读