django는 모든 보기 URL에 로그인 자격 증명을 제공합니다.
문제
애플리케이션의 뷰에 액세스하는 동안 제공된 자격 증명을 사용하여 로그인을 수행할 수 있는 방법이 django에 있습니까?
여기서 나의 동기는 다음과 같은 서비스를 사용하여 가용성을 모니터링하는 것입니다. 핑덤.가용성을 확인하려는 대부분의 URL은 다음과 같이 장식되어 있습니다. @login_required
이전에 로그인하지 않으면 액세스할 수 없습니다.
내 아이디어 솔루션은 GET 또는 POST 매개변수에 자격 증명을 제공하면서 내 뷰에 액세스하는 방법이 될 것입니다.또 다른 대안은 문제의 URL에 액세스하기 전에 로그인 및 세션 획득을 지원하는 사이트 가동 시간 모니터링 서비스일 수 있습니다.
업데이트
@Filip 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
.
제휴하지 않습니다 StackOverflow