0

関数へのアクセスを許可する前に、ユーザーのトークンを認証するデコレータを実装しようとしています。私の現在の実装は、デコレータでローカルを取得できないため、2 つのクエリを実行する必要があるという点で、ちょっと不安定です。これを行うより良い方法はありますか?

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()
4

1 に答える 1

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

于 2013-11-04T20:15:20.343 に答える