我正在尝试实现一个装饰器,在授予对函数的访问权限之前对用户的令牌进行身份验证。我当前的实现有点不可思议,因为我不能在装饰器中获得本地人,所以我需要做两个查询。有更好的方法吗?
def require_auth(func):
print 'require_auth'
@wraps(func)
def inner():
if 'token' in request.json:
token = request.json['token']
session = Session()
for instance in session.query(SQLTypes.User).filter(SQLTypes.User.token==token):
auth_user = instance.username
try:
auth_user
print 'authenticated!'
except NameError:
abort(401)
else:
abort(401)
return func()
return inner
@app.route('/st/projects', methods=['POST'])
@require_auth
def post_project():
session = Session()
for instance in session.query(SQLTypes.User).filter(SQLTypes.User.token==request.json['token']):
auth_user = instance.username
# do something with auth_user
session.close()
答案 0 :(得分:1)
您可以将经过身份验证的用户存储在flask.g
:
from flask import g
# ...
def require_auth(func):
# ...
for instance in session.query(SQLTypes.User).filter(SQLTypes.User.token==token):
g.auth_user = instance.username
try:
g.auth_user
print 'authenticated!'
except AttributeError:
abort(401)
# ...
然后在您的视图功能中,您可以g.auth_user
访问该用户。