【问题标题】:Browser back button takes user back inside after Logout浏览器后退按钮在注销后将用户带回内部
【发布时间】:2022-01-21 23:10:22
【问题描述】:

我一直在使用 Flask 开发 Web 界面,并且在浏览器中的 后退按钮 存在一些问题,因为在注销后点击它会将用户带回内部。我发现了类似的问题并尝试了他们的答案,但问题没有解决。我附上一个简单的例子,请看一下。

主要

from flask import Flask, request,session, redirect, url_for, render_template
from os import urandom

app = Flask(__name__)
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
app.secret_key = urandom(24)

@app.route('/', methods=['POST', 'GET'])
def index():

  if request.method == 'POST':
      session['Email id'] = request.form.get('Email Id')
      Pass = request.form.get('Password')
      try:
          if session['Email id'] == 'KK@gmail.com' and Pass == 'KKK':
              return render_template('Logged_in.html')
      except:
          return render_template('login.html')   
  return render_template('login.html')

@app.route('/sign_out')
def sign_out():
  session.pop('Email id')
  return redirect(url_for('index'))

@app.after_request
def add_header(r):
  r.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
  r.headers["Pragma"] = "no-cache"    
  r.headers["Expires"] = "0"
  r.headers['Cache-Control'] = 'public, max-age=0'    
  return r

if __name__ == '__main__':
  app.run(host="0.0.0.0", debug=True, threaded=True)

login.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <form action="{{ url_for('index') }}" method="POST" id="login" class="input-group">
      <input type="text" class="input-field" placeholder="Email Id" required name="Email Id">
      <input type="text" class="input-field" placeholder="Password" required name="Password">  
      <button type="submit" class="submit-btn" style="color: white;">Log in</button>
  </form>
</body>
</html>

Logged_in.html

<h2>You are Logged in</h2>
<a href="/sign_out"><i class="fas fa-sign-out-alt"></i>Log out</a>

【问题讨论】:

    标签: python html flask


    【解决方案1】:

    您的问题是,当用户按下后退按钮时,他们的浏览器将重新执行 POST 请求。您需要使用POST/redirect/GET 模式来防止这种情况。为此,您总共需要四个端点:

    1. GET /:签入用户登录的会话并渲染Logged_in.html,否则重定向到/login.html
    2. GET /login.html:渲染login.html
    3. POST /sign_in :检查用户名和密码。如果成功,更新会话并重定向到/
    4. POST /sign_out :注销用户会话并重定向到 /login.html

    不要在您的 POST 端点中呈现模板,只需让它们操纵会话然后重定向。

    【讨论】:

      猜你喜欢
      • 2012-07-09
      • 2013-07-20
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      • 2011-10-18
      • 2017-01-18
      • 2013-06-02
      • 1970-01-01
      相关资源
      最近更新 更多