繁体   English   中英

自定义身份验证装饰器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM