Djangoは任意のビューURLでログイン認証情報を提供します
質問
アプリケーション内のビューにアクセスしながら提供された資格情報を使用してログインを実行するためのDjangoにはありますか?
私の動機ここでは、 pingdom などのサービスを使用した可用性監視です。私は彼らの可用性を検証したいのは、私が以前にログインしたことがない限りアクセスできない@login_required
で飾られています。
私のアイデアソリューションは、GETまたはPOSTパラメータに資格情報を提供しながら、私のビューにアクセスする方法です。他の代替案は、おそらく、問題のURLにアクセスする前にログインしてセッションを取得するサイトの稼働時間監視サービスであり得る。
更新
@フィップDupanovićの方向と
.
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
またはusername
パラメータを使用する可能性のあるビューを使用している可能性のある衝突を防ぐために、トリガパラメータpassword
を追加しました。
解決
あなたは最も確かにできます!カスタムミドルウェアクラスこれは、要求オブジェクトを調べ、認証情報を取得し、要求がprocess_request
で装飾されたビューにルーティングされる前にユーザーに署名することができるカスタムlogin_required
メソッドを実装しています。