0

为了设置一些上下文,我正在通过 Flask 创建一个 API。为了对用户进行身份验证,我使用 了 flask-HTTPAuth。作为访问登录受保护资源的一部分,我verify_passwordauth.py. 如果提供的用户凭据评估为 True,则用户将附加到g对象。

app.py中,有一条路线/api/v1/users/token,当请求时,将向登录的用户发出令牌。但是,当我尝试访问g.userapp.py,我收到错误:AttributeError: '_AppCtxGlobals' object has no attribute 'user'

g为什么在访问对象时没有任何现有的“用户”属性app.py

授权文件

from flask import g
from flask_http import HTTPBasicAuth

from models import User

basic_auth = HTTPBasicAuth()

@basic_auth.verify_password
def verify_password(username, password):
    try:
        api_user = User.get(User.username == username)
    except User.DoesNotExist:
        return False
    user_verified = api_user.check_password(password)
    if user_verified:
        g.user = api_user
        return True
    return False

应用程序.py

from flask import Flask, g, jsonify

from auth import basic_auth as auth

app = Flask(__name__)

@auth.login_required
@app.route("/api/v1/users/token")
def issue_api_token():
    token = g.user.request_token()
    return jsonify({'token': token})
4

1 回答 1

0

你的装饰器的顺序是错误的,@app.route应该永远是第一位的。

@app.route("/api/v1/users/token")
@auth.login_required
def issue_api_token():
    # ...
于 2020-04-26T21:54:56.907 回答