Python “烧瓶登录”;load#u user()缺少1个必需的位置参数:';用户id'&引用;
我目前正在使用Flask Login进行身份验证,但是我得到一个错误,即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
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
装饰器的主页时才会发生错误