Flask-登录 | TypeError:需要支持缓冲区 API 的对象

Posted

技术标签:

【中文标题】Flask-登录 | TypeError:需要支持缓冲区 API 的对象【英文标题】:Flask-Login | TypeError: object supporting the buffer API required 【发布时间】:2019-05-25 20:15:34 【问题描述】:

我正在尝试使用 Flask-Login 模块创建登录和注册页面。 应用程序能够将用户详细信息添加到数据库(sqlite)并散列密码,但无法正确登录用户。

出现的错误是:“TypeError: object support the buffer API required”

提到的错误似乎与我代码中的“check_password_hash”方法有关。

请找到我的一段代码:

a) 注册

@app.route('/register', methods=['POST', 'GET'])
def register():
    form = RegisterForm()

    if form.validate_on_submit():
        hashed_password = generate_password_hash(form.password.data, method='sha256')
        new_user = User(username=form.username.data, password=hashed_password, email=form.email.data)
        db.create_all()
        db.session.add(new_user)
        db.session.commit()
        return render_template('register_ok.html', form=form)
    return render_template('register.html', form=form)

b) 登录(不起作用)

@app.route('/login', methods=['POST', 'GET'])
def login():
    form = LoginForm()

    if form.validate_on_submit():
        user = User.query.filter_by(username=form.username.data).first()
        if user:
            if check_password_hash(user.password, form.password):
                login_user(user, remember=form.remember.data)
                return redirect(url_for('dashboard'))
            return render_template('err_login.html')
    return render_template('login.html', form=form)

您能否建议可能的解决方法?

提前谢谢你!

【问题讨论】:

【参考方案1】:

错误涉及 werkzeug.security 模块而不是 flask_login。 我已经通过添加 user_loader 解决了这个问题:

@login_manager.user_loader
def load_user(user_id):
    return User.query.get(user_id)

干杯!

【讨论】:

以上是关于Flask-登录 | TypeError:需要支持缓冲区 API 的对象的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:支持flask api中所需的缓冲区API的对象

FLASK报错,TypeError,需要valid response

flask-jwt-extended TypeError:“函数”类型的对象不是 JSON 可序列化的

TypeError:在字符串格式化python Flask期间并非所有参数都转换了[重复]

TypeError:使用 Flask-JWT 时需要字符串或字节格式的密钥

TypeError:使用flask_jwt_extended int RESTful API时类型函数的对象不是JSON可序列化的