Почему Python Flask-User с MongoDB выдает ошибку, связанную с версией не-MongoDB? - PullRequest
0 голосов
/ 06 февраля 2019

Извините за предмет - это довольно расплывчато.

В любом случае, я пытаюсь интегрировать Flask-User в свое приложение Flask.Интеграция работала с точки зрения регистрации, т.е. пользователи могут зарегистрироваться, получить электронное письмо с подтверждением и подтвердить свою учетную запись.

Этот процесс также автоматически регистрирует пользователя. Это все было сделано без использования формы входа.

Однако, если пользователь выходит из системы и пытается выполнить вход, используя форму входа, я получаю эту ошибку:

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

Я знаю, что это значит, т.е. модель пользователя не делаетУ него нет свойства 'email_confirmed_at', но это поле используется только в приложениях быстрого запуска Flask-User, использующих Flask-SQLAlchemy.Вы можете видеть, что в документации .

я следую примеру MongoDB App , и об этом свойстве нигде не упоминается.

Кто-нибудь может подсказать, почему это может быть?В разделе «TroubleShooting» примера MongoDB просто указано TBD.

Дополнительная информация:

Вот модель User для одного из примеров 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')

AndВот модель User для примера 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=[])  

Большое спасибо!

1 Ответ

0 голосов
/ 06 февраля 2019

Это решено.Глупо не думать об этом раньше, но мне просто нужно было изменить модель User, включив в нее свойство email_confirmed_at.

Немного странно, что этот метод не работает «из коробки», но это действительно так.работа сейчас.

Добавлены новые биты:

# Email confirmation date & time
email_confirmed_at = db.DateTimeField()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...