Python 使用flask security确认注册时出错

Python 使用flask security确认注册时出错,python,flask,flask-security,Python,Flask,Flask Security,我正在使用flask security来处理用户注册、登录等。在使用默认flask security视图注册新用户时,我面临一个问题 编辑 我设法在解决这个问题上取得了一些进展。最初的问题是我没有提供load_用户回调。现在我在做: @login_manager.user_loader def load_user(user_id): return User.objects.get(id=user_id) 问题是确认url/视图似乎使用了匿名用户,因此,查询筛选器与正确的用户不匹配。有线

我正在使用flask security来处理用户注册、登录等。在使用默认flask security视图注册新用户时,我面临一个问题

编辑 我设法在解决这个问题上取得了一些进展。最初的问题是我没有提供load_用户回调。现在我在做:

@login_manager.user_loader
def load_user(user_id):
    return User.objects.get(id=user_id)
问题是确认url/视图似乎使用了匿名用户,因此,查询筛选器与正确的用户不匹配。有线索吗,伙计们

起初的 我能够在注册视图中提供用户邮件和密码,我成功地收到了确认电子邮件(flask security提供的默认模板),但当我尝试确认帐户时,单击邮件确认链接,我得到以下属性错误:

AttributeError: 'AnonymousUserMixin' object has no attribute 'roles'
以下是完整的回溯:

Traceback (most recent call last):
  File "/home/infante/PycharmProjects/venvs/wp/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/home/infante/PycharmProjects/venvs/wp/lib/python2.7/site-  packages/flask/app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/home/infante/PycharmProjects/venvs/wp/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/home/infante/PycharmProjects/venvs/wp/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/infante/PycharmProjects/venvs/wp/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
     rv = self.handle_user_exception(e)
  File "/home/infante/PycharmProjects/venvs/wp/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/infante/PycharmProjects/venvs/wp/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/infante/PycharmProjects/venvs/wp/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/infante/PycharmProjects/venvs/wp/lib/python2.7/site-packages/flask_security/views.py", line 226, in confirm_email
    logout_user()
  File "/home/infante/PycharmProjects/venvs/wp/lib/python2.7/site-packages/flask_security/utils.py", line 92, in logout_user
    identity=AnonymousIdentity())
  File "/home/infante/PycharmProjects/venvs/wp/lib/python2.7/site-packages/blinker/base.py", line 267, in send
    for receiver in self.receivers_for(sender)]
  File "/home/infante/PycharmProjects/venvs/wp/lib/python2.7/site-packages/flask_principal.py", line 469, in _on_identity_changed
    self.set_identity(identity)
  File "/home/infante/PycharmProjects/venvs/wp/lib/python2.7/site-packages/flask_principal.py", line 418, in set_identity
    self._set_thread_identity(identity)
  File "/home/infante/PycharmProjects/venvs/wp/lib/python2.7/site-packages/flask_principal.py", line 463, in _set_thread_identity
    identity=identity)
  File "/home/infante/PycharmProjects/venvs/wp/lib/python2.7/site-packages/blinker/base.py", line 267, in send
    for receiver in self.receivers_for(sender)]
  File "/home/infante/PycharmProjects/venvs/wp/lib/python2.7/site-packages/flask_security/core.py", line 217, in _on_identity_loaded
    for role in current_user.roles:
  File "/home/infante/PycharmProjects/venvs/wp/lib/python2.7/site-packages/werkzeug/local.py", line 338, in __getattr__
    return getattr(self._get_current_object(), name)
AttributeError: 'AnonymousUserMixin' object has no attribute 'roles'
以下是我的应用程序配置:

from flask import Flask
from flask.ext.security import MongoEngineUserDatastore, Security
from flask_login import LoginManager
from flask_mail import Mail

from wpapp.models import db, User, Role
from wpapp.views import frontend
from wpapp.configs import CONFS


login_manager = LoginManager()
app = Flask(__name__)

app.config["MONGODB_SETTINGS"] = CONFS['MONGODB_SETTINGS']
app.config["SECRET_KEY"] = CONFS['SECRET_KEY']
app.config['SECURITY_PASSWORD_HASH'] = CONFS['SECURITY_PASSWORD_HASH']
app.config['SECURITY_PASSWORD_SALT'] = CONFS['SECURITY_PASSWORD_SALT']
app.config['SECURITY_REGISTERABLE'] = CONFS['SECURITY_REGISTERABLE']
app.config['SECURITY_CONFIRMABLE'] = CONFS['SECURITY_CONFIRMABLE']
app.config['SECURITY_RECOVERABLE'] = CONFS['SECURITY_RECOVERABLE']
app.config['SECURITY_REGISTER_URL'] = CONFS['SECURITY_REGISTER_URL']
app.config['MAIL_SERVER'] = CONFS['MAIL_SERVER']
app.config['MAIL_PORT'] = CONFS['MAIL_PORT']
app.config['MAIL_USE_SSL'] = CONFS['MAIL_USE_SSL']
app.config['MAIL_USERNAME'] = CONFS['MAIL_USERNAME']
app.config['MAIL_PASSWORD'] = CONFS['MAIL_PASSWORD']

mail = Mail(app)
app.register_blueprint(frontend)

db.init_app(app)

user_datastore = MongoEngineUserDatastore(db, User, Role)
security = Security(app, user_datastore)

login_manager.init_app(app)

if __name__ == '__main__':
    app.run()
下面是我的模型定义(我使用的是mongodb):

有人知道问题出在哪里吗?
提前谢谢

我不确定您的确切问题是什么,但flask principal似乎正试图像身份验证用户一样使用
匿名用户
(无人登录时内存中的身份)。
匿名用户
没有
角色
属性,因此当它试图访问它时,会抛出一个异常。

谢谢deadbeef404,非常成功。我会对你的答案发表评论,但我没有任何代表

实际上,flask登录使用它自己的AnonymousUserMixin类。下面的代码片段显示了如何使用flask security的AnonymousUser类覆盖它

login_manager = LoginManager()
from flask.ext.security import AnonymousUser
login_manager.anonymous_user = AnonymousUser

谢谢你的回答!你能猜到怎么解决吗?我想我不久前遇到了这个问题或是一个非常类似的问题,但不幸的是我记不太清楚了。我遇到了这么多这样的事情,我不得不深入研究flask/flask security/flask principal等的源代码。唯一的选择是真正深入研究自己,并尝试找出发生了什么。这是我仍然喜欢Django而不是flask的原因之一;Django用户系统都包装得很好,可以实现基本功能。谢谢!我正设法四处挖掘。问题似乎是,我应该将flask登录匿名用户设置为flask安全匿名用户,并提供一个自定义加载用户函数。我正试着这么做。再次感谢您的时间广告帮助!
login_manager = LoginManager()
from flask.ext.security import AnonymousUser
login_manager.anonymous_user = AnonymousUser