maxliu06 发表于 2022-3-9 14:53:32

flask 密码认证问题

本帖最后由 maxliu06 于 2022-3-9 14:56 编辑

代码如下:    然后通过apipost 请求接口时,   user 永远都是为空的 ,这是为什么??

from flask import Flask, g, request, flash, redirect, url_for, make_response, jsonify
from flask_httpauth import HTTPBasicAuth
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret key'
app.debug = True


auth = HTTPBasicAuth()


from werkzeug.security import generate_password_hash, check_password_hash

# 模拟数据库
books = ['The Name of the Rose', 'The Historian', 'Rebecca']
users = [
      {'username': 'ethan', 'password': generate_password_hash('6666')},
      {'username': 'peter', 'password': generate_password_hash('4567')}
    ]


# 回调函数
@auth.verify_password
def verify_password(username, password):
    user = filter(lambda user: user['username'] == username, users)
    user = list(user)
    print(user)
    if user and check_password_hash(user['password'], password):
      g.user = username
      return True
    return False


@app.route('/', methods=['POST'])
@auth.login_required
def add_book():
    _form = request.form
    print(_form)
    title = _form["title"]
    if not title:
      return '<h1>invalid request</h1>'
    books.append(title)
    flash("add book successfully!")
    return redirect(url_for('index'))

@auth.error_handler
def unauthorized():
    return make_response(jsonify({'error': 'Unauthorized access'}), 401)

if __name__ == '__main__':
    app.run()

wp231957 发表于 2022-3-9 15:10:05

咋没有前端代码呢

maxliu06 发表于 2022-3-9 15:12:31

wp231957 发表于 2022-3-9 15:10
咋没有前端代码呢

和前端没啥关系,就是一个用户认证接口

wp231957 发表于 2022-3-9 15:15:01

maxliu06 发表于 2022-3-9 15:12
和前端没啥关系,就是一个用户认证接口

用户认证这个用户不是由浏览器(前端) 传过来的吗
单纯的后台咋个认证法???

wp231957 发表于 2022-3-9 15:16:59

maxliu06 发表于 2022-3-9 15:12
和前端没啥关系,就是一个用户认证接口

你那个verify_password() 怎么没有传参????

isdkz 发表于 2022-3-10 12:42:14

本帖最后由 isdkz 于 2022-3-10 12:49 编辑

因为 HTTPBasicAuth 的认证方式不是通过 post 参数,

而是通过请求头字段Authorization,

规范为 Authorization: basic("用户名:密码" 的 base64编码),

例如 ethan:6666 的 base64 编码为 ZXRoYW46NjY2Ng==,

你应该在postman的 Header 而不是 Body 加上 Authorization,值为 basic ZXRoYW46NjY2Ng==,

你可以看一下这篇文章的第七点:
https://blog.csdn.net/qq285679784/article/details/102891070

maxliu06 发表于 2022-3-11 09:23:46

isdkz 发表于 2022-3-10 12:42
因为 HTTPBasicAuth 的认证方式不是通过 post 参数,

而是通过请求头字段Authorization,


感谢之极~!
页: [1]
查看完整版本: flask 密码认证问题