繁体   English   中英

烧瓶登录错误

[英]Flask-login error , python

我是python / flask的新手,正在尝试使用flask-login构建应用程序。 我无法理解我得到的错误“对象没有属性'get_id'”感谢您的帮助。

class User(UserMixin):
    def __init__(self, email, id, active=True):
        self.email = email
        self.id = id
        #self.active = active

    def get_id(self):
        return self.id

    def is_active(self):
        # Here you should write whatever the code is
        # that checks the database if your user is active
        return True

    def is_anonymous(self):
        return False

    def is_authenticated(self):
        return True

login_manager = LoginManager()
login_manager.init_app(app)


 # load_user .. never makes it till here 
 @login_manager.user_loader
 def load_user(userid):
     try:
         print 'this gets executed:--', userid
         return User.get(User.id==userid)
     except User.DoesNotExist:
         return None


@app.route('/confirm/<token>', methods=['GET', 'POST'])
def confirm_email(token):
    try:
        email = confirm_token(token)
        print email
    except:
        flash('The confirmation link is invalid or has expired.', 'danger')

    userExists = db.userExists(email)

    if userExists:
        flash('Account already confirmed. Please login.', 'success')
        login_user(userExists, force=True, remember=True)
    else:
        flash('You have confirmed your account. Thanks!', 'success')
        confirm_login()
        login_user(userExists, force=True, remember=True)
    return redirect(url_for('Hello'))

数据库代码

def userExists(email):
    SQL = """SELECT * FROM all_users WHERE email = %s"""
    data = (email,)
    records = runQuery(SQL, data)
    if records and records[0]:
        return records[0][0]
    else:
        records

我得到的错误:

 File "/Documents/Dev/Ottawa-Final/ottawa-final/app/network_of_innovators.py", line 310, in confirm_email
    login_user(userExists, force=True, remember=True)
  File "/Documents/Dev/lib/python2.7/site-packages/flask_login.py", line 678, in login_user
    user_id = getattr(user, current_app.login_manager.id_attribute)()
AttributeError: 'str' object has no attribute 'get_id'

confirm_emailuserExists是一个字符串(我猜是由userExists()方法返回的用户电子邮件)。 login_user()期望它的第一个参数是一个object但是您要传递字符串,因此会出错。

解决方案是先创建一个User对象,然后将其传递给login_user()

防爆。 您应该执行以下操作:

userExists = db.userExists(email)
if userExists:
    flash('Account already confirmed. Please login.', 'success')
    user_id = db.getUserId(email) # Get the User's id somehow
    user = User(email, user_id)
    login_user(user, force=True, remember=True)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM