2016-05-27 1 views
1

Мое приложение терпит неудачу, когда я вызываю login_user с ошибкой NotImplementedError: No 'id' attribute - override 'get_id'. Мой пользователь имеет атрибут id. Почему это не удается?login_user не может получить идентификатор пользователя

if form.validate_on_submit(): 
    user = User.query.filter_by(email=form.email.data).first() 

    if user is not None and user.verify_password(form.password.data): 
     print(user.user_id) 
     login_user(user, False) 
     return jsonify({'response': user.user_id}) 
class User(UserMixin, db.Model): 
    __tablename__ = 'users' 
    user_id = db.Column(db.Integer, primary_key = True) 
    username = db.Column(db.String(64), unique=True, index=True) 
    email = db.Column(db.String(64), unique=True, index=True) 
    password_hash = db.Column(db.String(128)) 

ответ

2

login_user вызовы get_id на экземпляре пользователя. UserMixin предоставляет метод get_id, который возвращает атрибут id или вызывает исключение. Вы не определили атрибут id, вы назвали его (избыточно) user_id. Назовите свой атрибут id (предпочтительно) или переопределите get_id, чтобы вернуть user_id.

+0

Я написал исключение, но это не дало мне никакой полезной информации. Каким будет правильное исключение для этой ситуации? – Brosef

+0

Flask-Login * повышает * исключение, вы его не пишете. Он будет отображаться в режиме трассировки в режиме отладки. Если это не так, у вас было что-то еще неправильно сконфигурированное. – davidism