1

アプリケーションのビューにアクセスしているときに提供された資格情報を使用してログインを実行する方法はdjangoにありますか?

ここでの私の動機は、Pingdomなどのサービスを使用した可用性の監視です。可用性を検証したいURLのほとんどは、@login_required以前にログインしていない限りアクセスできないようにするで装飾されています。

私のアイデアソリューションは、GETまたはPOSTパラメーターでクレデンシャルを提供しながらビューにアクセスする方法です。別の代替手段は、問題のURLにアクセスする前にログインしてセッションを取得することをサポートするサイト稼働時間監視サービスである可能性があります。

アップデート

@FilipDupanovićの指示とここからのコードのおかげで、私の単純な動作ミドルウェアは次のようになります。

from django.contrib.auth import authenticate, login

class AuthenticationEverywhereMiddleware(object):
    """
    Middleware to allow logging in by supplying login credentials in any URL
    """

    def process_request(self, request):
        if (request.GET.get('authenticateEverywhere','') == 'GET'):
            username = request.GET['username']
            password = request.GET['password']
            user = authenticate(username=username, password=password)
            if user is not None:
                if user.is_active:
                    login(request, user)

またはパラメーターauthenticateEverywhereを使用する可能性のあるビューとの衝突を防ぐために、トリガーパラメーターを追加しました。usernamepassword

4

1 に答える 1

3

あなたは間違いなくできます!リクエストがで装飾されたビューにルーティングされる前に、リクエストオブジェクトを検査し、資格情報を取得してユーザーにサインインできるカスタムメソッドを実装するカスタムミドルウェアクラスを作成する必要があります。process_requestlogin_required

于 2012-09-30T23:12:15.280 に答える