[英]Flask session redirects to login page
我目前正在构建基于 flask 的 LAN 聊天应用程序(使用 sqlite3 存储用户名和 socketio 进行消息传递)并且无法正确实现会话。
我已遵循本指南: https://www.techwithtim.net/tutorials/flask/sessions/并在此处阅读文档https://flask-session.readthedocs.io/en/latest/但不知何故仍未得到我的代码工作:
在登录页面,当用户名发布时,我希望用户被重定向到聊天页面。html,但这不会发生。 相反,它们被重定向到登录页面,我不知道为什么:
from flask import Flask, render_template, request, flash, session, redirect, url_for
#creating the routes
@app.route('/login', methods=["POST", "GET"])
def login_form():
if request.method == "POST":
username = request.form.get("user_name")
session["user"] = username
return redirect(url_for('chat_page'))
else:
if "user" in session:
return redirect(url_for('chat_page'))
return render_template('login.html')
@app.route('/chat-page')
def chat_page():
if "user" in session:
username = session["user"]
return render_template('chat-page.html', Uname=username)
return redirect(url_for('login_form'))
@app.route("/logout")
def logout():
session.pop("user", None)
flash("You have been logged out!")
return redirect(url_for('login_form'))
from flask_session import Session
app = Flask(__name__)
Session(app)
当我尝试调试您的代码时,我遇到了密钥问题。 我不知道您如何或在何处设置或调用您的应用程序,但这是我的完整代码。 他们的关键可能是设置app.config['SESSION_TYPE'] = 'filesystem'
。 我用这个答案来解决它。
from flask import Flask, render_template, request, flash, session, redirect, url_for
from flask_session import Session
app = Flask(__name__)
app.config['SESSION_TYPE'] = 'filesystem'
app.config['SECRET_KEY'] = 'secret key'
Session(app)
# creating the routes
@app.route('/login', methods=["POST", "GET"])
def login_form():
if request.method == "POST":
username = request.form.get("user_name")
session["user"] = username
return redirect(url_for('chat_page'))
else:
if "user" in session:
return redirect(url_for('chat_page'))
return render_template('login.html')
@app.route('/chat-page')
def chat_page():
if "user" in session:
return '<div>chat page!</div>'
return redirect(url_for('login_form'))
@app.route("/logout")
def logout():
session.pop("user", None)
flash("You have been logged out!")
return redirect(url_for('login_form'))
app.run(debug=True)
我要说的是,您的重定向逻辑完全没问题。 问题一定出在 session 上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.