【问题标题】:AttibuteError: '_AppCtxGlobals' object has no attribute 'user'AttibuteError:“_AppCtxGlobals”对象没有属性“用户”
【发布时间】:2020-08-08 17:27:42
【问题描述】:

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

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

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

auth.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

app.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})

【问题讨论】:

    标签: python flask flask-httpauth


    【解决方案1】:

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

    @app.route("/api/v1/users/token")
    @auth.login_required
    def issue_api_token():
        # ...
    

    【讨论】:

      猜你喜欢
      • 2014-02-03
      • 1970-01-01
      • 2021-06-29
      • 2013-05-13
      • 2021-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多