python - 有没有办法在不使用 flask-login 来管理用户的情况下保护 Flask 中的登录内容?
问题描述
我正在尝试在 Flask\python 中建立一个 POC 网站来使用一些 API。我做了一个简单的登录页面,重定向到 /loggedin。但是 /loggedin 也可以通过编写https://mysite/loggedin.html 来访问。有没有一种简单的方法可以防止这种情况,而不涉及使用诸如烧瓶登录之类的东西?我不想花时间建立 SQL 用户群等,因为我将是该应用程序的唯一用户。
app = Flask(__name__)
@app.route("/")
def home():
return render_template("home.html")
@app.route("/loggedin")
def innsiden():
return render_template("loggedin.html")
@app.route("/login", methods=['GET', 'POST'])
def login():
error = None
if request.method == 'POST':
if request.form['username'] != 'admin' or request.form['password'] != 'admin':
error = 'Invalid Credentials. Please try again.'
else:
return redirect(url_for('loggedin'))
return render_template('login.html', error=error)
解决方案
在烧瓶中,您可以维护服务器上的“会话”信息。一个简单的方法可能是
- 当用户使用正确的密码登录时,将他们的用户名添加到会话数据中
- 当登录用户访问“安全”页面时,flask 会检查他们的用户 ID 是否在 sesson data
if 'username' in session:
中。如果是,则将它们定向到正确的页面,否则将它们定向到登录页面 - 当用户注销时,他们的用户名将从列表中删除。
此配方的一个版本在https://www.tutorialspoint.com/flask/flask_sessions.htm进行了描述
推荐阅读
- java - 如何将多行从 JTable 添加到 MySQL 数据库
- sql - 根据其他列值对不同列求和
- javascript - p5.js中旋转线上的圆之间的碰撞检测
- python - 为什么我得到重复的答案?
- mysql - MySQL历史列表长度总是很长 - 我假设它是已经死亡的客户端连接
- php - 在 PHP 中准备好的 SQLite 查询中使用 strftime 函数中的日期参数
- contextmenu - FileManager-Actions:是否可以在当前目录中启动操作?
- jupyter-notebook - 如何在 jupyter notebook 中渲染完整的乳胶文件
- c++ - Winsock 连接失败并显示 WSAEFAULT | 仅在 Windows 11 上出现错误
- javascript - 初始化前无法访问 - 跨多个文件定义 ENV 变量