Python 属性错误:模块';flask#u login.login#u manager';没有属性';用户加载程序';使用无模式的Flask登录时

Python 属性错误:模块';flask#u login.login#u manager';没有属性';用户加载程序';使用无模式的Flask登录时,python,flask,flask-login,Python,Flask,Flask Login,我有以下代码,我正在尝试使用Flask进行身份验证: from flask import Flask from flask_login import LoginManager, login_manager from auth.auth import auth_bp from environments.environments import environments_bp from migration.migration import migration_bp from logs.logs imp

我有以下代码,我正在尝试使用Flask进行身份验证:

from flask import Flask
from flask_login import LoginManager, login_manager
from auth.auth import auth_bp
from environments.environments import environments_bp
from migration.migration import migration_bp
from logs.logs import logs_bp

UPLOAD_FOLDER = 'static/uploads'

@login_manager.user_loader
def load_user(user_id):
    # since the user_id is just the primary key of our user table, use it in the query for the user
    return True

def create_app():

    app = Flask(__name__)

    app.register_blueprint(auth_bp, url_prefix='/auth')
    app.register_blueprint(environments_bp, url_prefix='/environments')
    app.register_blueprint(migration_bp, url_prefix='/migration')
    app.register_blueprint(logs_bp, url_prefix='/logs')

    app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
    app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'

    login_manager_copy = LoginManager()
    login_manager_copy.login_view = 'auth.login'
    login_manager_copy.init_app(app)

    return app
我没有使用任何数据库,身份验证只是一个硬编码的if检查,因为这是用于一次性使用的内部工具


如何修复此错误?

在应用程序工厂中创建LoginManager()对象之前,您正在装饰load\u user函数
create\u app()

对于一个组织良好的应用程序,您应该将LoginManager配置为在应用程序工厂中使用您的应用程序,就像您现在尝试的那样

def create_app():
    app = Flask(__name__)
    ...
    login_manager = LoginManager()
    login_manager.init_app(app)
    ...
    return app
然后,在您的授权蓝图中,您可以访问应用程序对象代理中的
登录\u管理器
,并在其中定义
加载\u用户
回调功能

from flask import current_app as app
...
...
@app.login_manager.userloader # Here your app is already created and configured with login manager
def load_user(_id):
    #Get your user from the database or where ever you are storing your user information and construct the user object to return
    if user_found:
      return user
    else:
      return None
...
...
不要忘记,在成功登录时,您还需要调用
save\u user
函数来保存用户(您可以选择将其保存在DB或您认为合适的任何其他位置)

现在,每个请求都会调用这个回调函数,它将重新加载使用会话中存储的userID保存的用户对象(例如cookie)。如果它找到具有相应ID的用户,它将根据
load\u user
回调函数中的逻辑构造用户对象,并且您将拥有一个名为
current\u user
的用户代理,您可以在请求的上下文中访问该代理

例如,在GET请求中,您可以执行以下操作

if current_user.age < 19:
  raise Unauthorized("Too young to rent a car")
如果当前用户年龄<19岁:
未经授权的抚养(“太小而不能租车”)
我强烈建议您彻底阅读Flask登录文档,这将使您更容易理解流程