我正在使用 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
}
}
}
如果您需要我提供更多信息,请发表评论。我迫切需要解决这个问题。谢谢