1

ボトル内のすべてのリクエストについて、リクエストがHTTP認証を介して適格であるかどうかを確認したいと思います。私の考えは、すべての@route関数の開始時に呼び出される関数を使用することです。

def check_authentificaiton(requests):
    auth = request.headers.get('Authorization')
    credentials = parse_auth(auth)
    if credentials[0] is not 'user' or credentials[1] is not 'password':
        raise Exception('Request is not authorized')

すべてのリクエストを保護したいので、これは少し冗長に思えます。呼び出しを忘れると失敗する可能性があります。もっと良い方法はありますか?

4

1 に答える 1

6

ユーザーがログインしている場合にのみアクセスするルートを義務付けるデコレータを探していると思います。以下の例のように、@require_uidは、ユーザーがログインする必要がある任意の関数で使用できるデコレータです。Flaskにはlogin_requiredデコレータがあります。

デコレータを使用してbottle.pyでサインインする必要がある

def require_uid(fn):
    def check_uid(**kwargs):   
        cookie_uid = request.get_cookie('cookieName', secret='cookieSignature')

        if cookie_uid:
            # do stuff with a user object
            return fn(**kwargs)
        else:
            redirect("/loginagain")

    return check_uid



@route('/userstuff', method='GET')
@require_uid
@view('app')
def app_userstuff():
    # doing things is what i like to do
    return dict(foo="bar")
于 2012-12-30T01:42:40.937 に答える