Flask 服务器端会话创建新会话而不是维护

问题描述 投票:0回答:0

我正在使用 next.js 从 flask restful 后端调用函数。我有两个后端函数,一个登录类和一个收件箱类。我从客户端会话转换为服务器端会话,这样我就可以在页面加载之前呈现数据。我的登录路由创建一个会话并存储一个键值对,其格式如下:'logged_in_user':'username_inputted_by_user'。我将其存储在这里是因为我需要访问收件箱功能的用户名。当我运行登录类时,会话已成功创建并且值“logged_in_user”存储在会话中。但是,当页面重定向并点击 Inbox 类时,它会出于某种原因创建另一个会话。因此,当收件箱函数尝试访问变量“logged_in_user”并使用它时,它得到的值为 none,因为当前会话不包含此信息,而前一个会话包含此信息。我已经阅读了很多关于 cors 和 Access-Control-Allow-Credentials 的问题,但我已经尝试了所有这些解决方案,但没有任何效果。有人有主意吗?我的功能如下。

烧瓶登录类:

class Inbox(Resource):
    parser = SessionEnabledRequestParser()
    def get(self):
        self.parser.maintain_session()

        logged_in_username=session.get("logged_in_username")
        print(logged_in_username)

        try:
            viewed_message_logs = Messages.query.filter(Messages.username==logged_in_username).filter(Messages.viewed=='Viewed').all() 
            unviewed_message_logs = Messages.query.filter(Messages.username==logged_in_username).filter(Messages.viewed=='Unviewed').all()

            viewed_formatted_messages = [
                {
                    "game": message.game,
                    "body": message.message,
                    "date": message.date.strftime("%Y-%m-%d %H:%M:%S")
                } for message in viewed_message_logs
            ]

            unviewed_formatted_messages = [
                {
                    "game": message.game,
                    "body": message.message,
                    "date": message.date.strftime("%Y-%m-%d %H:%M:%S")
                } for message in unviewed_message_logs
            ]


            return {'status':200, 'viewedMessages': viewed_formatted_messages, 'unviewedMessages': unviewed_formatted_messages}

        except Exception as err:
            print(err)
            return { 'status': 400, 'redirect':'/api/test/account', 'message':'There was an error processing the page. Please try your action again or submit a feedback ticket.'}

api.add_resource(Inbox, '/api/test/inbox')

我试图维持会话的代码:

class SessionEnabledRequestParser(reqparse.RequestParser):
    def maintain_session(self):
        session.permanent = True

我的 next.js 前端试图调用收件箱类:

export async function getServerSideProps(ctx) {

    try {
        const res = await fetch('http://127.0.0.1:5000/api/test/inbox', {
            method: 'GET',
            credentials: 'include',
            headers: {
                'Content-Type': 'application/json'
            }
        })

        if (!res.ok) {
            throw new Error('Failed to fetch data')
        }

        const data = await res.json()

        return {
            props: { data }
        }

    } catch (e) {

        console.log(e)

        // return {
        //     redirect: {
        //         destination: '/login',
        //         permanent: false
        //     }
        // }
    }

    return {
        props: {
            cookieReq
        }
    }
}

如果您需要我提供更多信息,请发表评论。我迫切需要解决这个问题。谢谢

flask session next.js flask-restful
© www.soinside.com 2019 - 2024. All rights reserved.