Py学习  »  MongoDB

解决了为什么MongoDB的Python Flask用户抛出与非MongoDB版本相关的错误?

digitalformula • 4 年前 • 516 次点击  

很抱歉,这个话题很模糊。

不管怎样,我正在尝试将Flask用户集成到我的Flask应用程序中。从注册的角度来看,这种集成是有效的,即用户可以注册,接收确认电子邮件,然后确认他们的帐户。

这个过程也会自动让用户登录。这一切都是在没有使用登录表单的情况下完成的。

但是,如果用户注销并尝试使用登录表单重新登录,则会出现以下错误:

builtins.AttributeError
    AttributeError: 'User' object has no attribute 'email_confirmed_at'

我知道这意味着什么,即用户模型没有“电子邮件确认”属性,但该字段仅在使用Flask SQLAlchemy的Flask用户快速启动应用程序中使用。你可以在 documentation .

我在跟踪 MongoDB App 例如,在任何地方都没有提到那处房产。

有人能告诉我为什么会这样吗?MongoDB示例的“故障排除”部分只是说TBD。

其他信息:

下面是一个SQLAlchemy示例的用户模型:

# Define the User data-model.
# NB: Make sure to add flask_user UserMixin !!!
class User(db.Model, UserMixin):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    active = db.Column('is_active', db.Boolean(), nullable=False, server_default='1')

    # User authentication information. The collation='NOCASE' is required
    # to search case insensitively when USER_IFIND_MODE is 'nocase_collation'.
    email = db.Column(db.String(255, collation='NOCASE'), nullable=False, unique=True)
    email_confirmed_at = db.Column(db.DateTime())
    password = db.Column(db.String(255), nullable=False, server_default='')

    # User information
    first_name = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='')
    last_name = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='')

    # Define the relationship to Role via UserRoles
    roles = db.relationship('Role', secondary='user_roles')

下面是MongoDB示例的用户模型:

# Define the User document.
# NB: Make sure to add flask_user UserMixin !!!
class User(db.Document, UserMixin):
    active = db.BooleanField(default=True)

    # User authentication information
    username = db.StringField(default='')
    password = db.StringField()

    # User information
    first_name = db.StringField(default='')
    last_name = db.StringField(default='')

    # Relationships
    roles = db.ListField(db.StringField(), default=[])  

非常感谢!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/51839
 
516 次点击  
文章 [ 1 ]  |  最新文章 4 年前
digitalformula
Reply   •   1 楼
digitalformula    5 年前

这就解决了。以前没想到这一点很傻,但我只是修改了用户模型以包含 email_confirmed_at 财产。

这有点奇怪,它失败了这种方式“开箱即用”,但它现在确实工作了。

新增位:

# Email confirmation date & time
email_confirmed_at = db.DateTimeField()