[英]custom authentication decorator
我正在尝试实现一个装饰器,该装饰器在授予对功能的访问权限之前对用户的令牌进行身份验证。 我当前的实现有点奇怪,因为我无法在装饰器中获取本地变量,因此我需要执行两个查询。 有一个更好的方法吗?
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()
您可以将经过身份验证的用户存储在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
访问用户。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.