Аутентификация пользователя без использования Django rest framework? - PullRequest
0 голосов
/ 10 апреля 2020

Привет всем У меня есть пара вопросов относительно рефакторинга некоторых старых конечных точек API, насколько это касается аутентификации. У меня есть представление, например ...

@csrf_exempt
# PARAMETERS: username, password
def submit_offer(request):
    """Submit an offer"""
    username = request.GET.get("username")
    password = request.GET.get("password")
    # Authenticate user to set instance.user value into BuyerForm
    user = authenticate(username=username, password=password)
    if not user:
        # Always want our potential Buyer to be logged in & authenticated
        return JsonResponse({'message': 'Please login to continue.'})
    if request.method == 'POST':
        form = BuyerForm(request.POST, request.FILES)
        if form.is_valid():
            instance = form.save(commit=False)
            # sets current user as Buyer.user
            instance.user = user
            instance.save()
            return JsonResponse({'success': True}, status=200)
        else:
            data = form.errors.as_json()
            return JsonResponse(data, status=400, safe=False)
    else:
        return JsonResponse(data={'status': 403})

Теперь каждое представление, которое использует форму и нуждается в захвате instance.user, имеет такие же строки кода ниже ... теперь я подумал, используя запрос .user справился бы с этой задачей, но при тестировании таким образом я получаю AnonymousUser, что меня смущает?

username = request.GET.get("username")
password = request.GET.get("password")
# Authenticate user to set instance.user value into BuyerForm
user = authenticate(username=username, password=password)

Теперь есть лучший способ аутентификации пользователя, как в обычном django просмотр с использованием request.user, вместо того, чтобы вручную проверять подлинность пользователя в каждом представлении? (отредактировано)

1 Ответ

1 голос
/ 12 апреля 2020

password = request.GET.get("password").

Это очень уязвимый способ разработки приложения django.

См. Доступ к имени пользователя и паролю в django возвращает заголовок запроса Нет

Кстати, напишите собственное промежуточное ПО и поместите туда свой код.

username = get_username_from_header
password = get_password_from_header
# Authenticate user to set instance.user value into BuyerForm
user = authenticate(username=username, password=password)
# Attach user to request 
request.user = user

Поскольку каждый запрос проходит через промежуточное программное обеспечение, вы можете получить доступ к пользователю из каждого представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...