簡體   English   中英

Flask session 重定向到登錄頁面

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM