如何将登录所需的装饰器集成到具有静态用户 ID 和密码的 Flask 路由?

ayr*_*nna 3 python flask flask-login

我是 Flask 和 python 的新手,我正在尝试添加所需的登录以及除主页之外的所有路由。我读过有关 Flask-login 模块的内容,但没有取得任何成功。寻找建议!

我尝试使用 Flask-login 并阻止访问“/data”路径。它不起作用。我的登录要求很简单,如果用户密码是admin/admin则允许登录。并确保用户已登录以访问所有后续路由。

这是我的烧瓶代码

from flask import Flask, render_template, redirect, url_for, request
import subprocess
import os
import datetime
import time
app = Flask(__name__)


@app.route("/")
def home():
   now = datetime.datetime.now()
   timeString = now.strftime("%Y-%m-%d %H:%M")
   templateData = {
      'title' : 'HELLO!',
      'time': timeString
      }
   return render_template('main.html', **templateData)


@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('data'))
    return render_template('login.html', error=error)

@app.route("/data")
def data():
   now = datetime.datetime.now()
   timeString = now.strftime("%Y-%m-%d %H:%M")
   templateData = {
      'title' : 'HELLO!',
      'time': timeString
      }
   return render_template('api.html', **templateData)

if __name__ == "__main__":
   app.run(host='0.0.0.0', debug=True)
Run Code Online (Sandbox Code Playgroud)

我不希望在没有以 admin/admin 身份登录的情况下访问 /data 路由

Non*_*one 5

flask_login应该可以解决问题。

@login_required在您希望当前未登录的用户无法使用的任何路线上使用装饰器。

from flask_login import login_required

@app.route("/data")
@login_required
def data():
    ...
    ...
Run Code Online (Sandbox Code Playgroud)

Flask 的首选会话管理扩展是session. 对于这个例子,你需要一个密钥......

import secrets

app = Flask(__name__)
app.config['SECRET_KEY'] = secrets.token_hex(16)
Run Code Online (Sandbox Code Playgroud)

以及烧瓶管理的示例用法session......

from flask import session

@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:
            session['logged_in'] = True
            return redirect(url_for('data'))
    return render_template('login.html', error=error)
Run Code Online (Sandbox Code Playgroud)

  • 我没有适当的用户类别。我希望只有具有管理员/管理员凭据的单个用户才能访问它。其他人不应该能够访问。我如何为此定义用户类别? (2认同)