Python “烧瓶登录”;load#u user()缺少1个必需的位置参数:';用户id'&引用;

Python “烧瓶登录”;load#u user()缺少1个必需的位置参数:';用户id'&引用;,python,flask,flask-login,Python,Flask,Flask Login,我目前正在使用Flask Login进行身份验证,但是我得到一个错误,即load\u user()缺少一个必需的位置参数:“user\u id”,但是当我调试我的应用程序时,user\u id存在,并且被正确地传递到Login\u user()函数中(并存储在会话['user\u id']变量中) 以下是我的代码,用于将用户登录,然后导航到主页: @app.route('/', methods=['GET', 'POST']) def login(): login_form = Logi

我目前正在使用Flask Login进行身份验证,但是我得到一个错误,即
load\u user()缺少一个必需的位置参数:“user\u id”
,但是当我调试我的应用程序时,user\u id存在,并且被正确地传递到
Login\u user()
函数中(并存储在
会话['user\u id']
变量中)

以下是我的代码,用于将用户登录,然后导航到主页:

@app.route('/', methods=['GET', 'POST'])
def login():
    login_form = LoginForm()
    username = login_form.username.data
    password = login_form.password.data
    if user_details_valid(username, password):
        login_user(user_service.get_user_object(username))
        return redirect(url_for(‘home’))
    return render_template('login.html', form=login_form)

@app.route(‘/home’)
@login_required
def home():
    return render_template(“home.html")
用户模型如下所示:

class User(UserMixin):

def __init__(self, username):
    self.username = username
    self.email = None
    self.password = None
    self.user_id = None

def is_authenticated(self):
    return True

def is_active(self):
    return True

def is_anonymous(self):
    return False

def get_id(self):
    return str(self.user_id)

def set_id(self, user_id):
    self.user_id = user_id

def set_password(self, password_hash):
    self.password = password_hash

def set_email(self, email):
    self.email = email
@login.user_loader
def load_user(self, user_id):
    return self.collection.find_one({"user_id": user_id})
我得到的stacktrace是:

File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 1403, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/_compat.py", line 33, in reraise
    raise value
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/_compat.py", line 33, in reraise
    raise value
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask_login.py", line 756, in decorated_view
    elif not current_user.is_authenticated():
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/werkzeug/local.py", line 347, in __getattr__
    return getattr(self._get_current_object(), name)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/werkzeug/local.py", line 306, in _get_current_object
    return self.__local()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask_login.py", line 46, in <lambda>
    current_user = LocalProxy(lambda: _get_user())
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask_login.py", line 794, in _get_user
    current_app.login_manager._load_user()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask_login.py", line 363, in _load_user
    return self.reload_user()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask_login.py", line 325, in reload_user
    user = self.user_callback(user_id)
TypeError: load_user() missing 1 required positional argument: 'user_id'

为了解决此错误,我将我的
用户\u加载器
放在我的
\uuu init\uuuu.py
文件中,如中所示

然而,这并不是一个完美的答案,因为这两个答案都没有显示出来,事实上,Miguel's guide和RunningCode's guide在应用程序的不同部分都有用户加载程序

这个解决方案没有意义,因为我必须从我的
\uuuu init\uuuu.py
内部访问我的数据库,这看起来非常混乱,但我能够修复错误并正确登录


该错误可能是因为我的
\uuuu init\uuuuuuy.py
似乎加载了两次,我在某个地方找到了另一个答案,说明了由于应用程序运行的两个实例导致的类似错误。

我得到了相同的错误。初始化LoginManager时,我忘了将应用程序的实例作为参数传递

app/init.py

#...
from flask_login import LoginManager
app = Flask(__name__)
# ...
login = LoginManager(app)

你提供回拨了吗?更新了我的帖子以包含它。我认为它与调试
会话时一样工作正常。get('user\u id')
正确返回用户id,似乎只有在加载带有
@login\u required
装饰器的主页时才会发生错误