flask-HTTPTokenAuth验证令牌失败



我正在阅读Miguel Grinberg的《Flask Web Development》一书,在第14章(应用程序编程接口)中遇到了身份验证例程的障碍。我试图根据github repo中的示例代码更新代码以使用当前版本的flask-HTTPAuth。我可以通过电子邮件/密码对HTTPBasicAuth进行身份验证,但是当我尝试传递令牌时,我仍然会得到密码提示。

这是我的app/api/authentication.py文件:
from flask import g, jsonify
from flask_httpauth import HTTPBasicAuth, HTTPTokenAuth, MultiAuth
from ..models import User
from . import api
from .errors import forbidden, unauthorized

basic_auth = HTTPBasicAuth()
token_auth = HTTPTokenAuth(scheme='Bearer')
multi_auth = MultiAuth(basic_auth, token_auth)

@basic_auth.verify_password
def verify_password(email, password):
if email == '':
return False
user = User.query.filter_by(email=email).first()
if not user:
return False
g.current_user = user
g.token_used = False
if user.verify_password(password):
return user
else:
return False
@token_auth.verify_token
def verify_token(token):
user = User.verify_auth_token(token)
if user:
g.current_user = user
g.token_used = True
return user
else:
return False
@basic_auth.error_handler
def auth_error():
return unauthorized('Invalid credentials')
@token_auth.error_handler
def auth_error():
return unauthorized('Invalid credentials')
@api.before_request
@multi_auth.login_required
def before_request():
if not g.current_user.is_anonymous and not g.current_user.confirmed:
return forbidden('Unconfirmed account')
@api.route('/tokens/', methods=['POST'])
@multi_auth.login_required
def get_token():
if g.current_user.is_anonymous or g.token_used:
return unauthorized('Invalid credentials')
return jsonify({'token': g.current_user.generate_auth_token(), 'expiration': 3600})

我使用Python 3.10.6, Flask 2.2.2和HTTPie 3.2.1。我做错了什么?

我明白了。当前版本的HTTPie(3.2.1)需要知道你发送的是令牌还是userid:password对。为此,您可以使用命令

http --auth <username>:<password> ...

用于基本认证或

http --auth-type bearer --auth <token> ...

用于令牌认证。

最新更新