属性错误:'_AppCtxGlobals'对象没有属性'user'



为了设置一些上下文,我通过Flask创建了一个API。为了验证用户,我使用烧瓶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对象时没有任何现有的"user"属性?

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

装饰器的顺序是错误的,@app.route应该总是排在第一位。

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

相关内容

  • 没有找到相关文章

最新更新