Как я могу реализовать вход и выход администратора, используя django rest framework?
передо мной поставили задачу программно аутентифицировать вход в систему администратора и выход из системы.
Я могу выполнить вход в систему, но при выходе из системы, когда я проверяю, какой пользователь выходит из системы, он говорит AnonymousUser. Как я могу убедиться, что я выхожу из текущего пользователя, который вошел в систему.
Я использую django rest framework и тестирую его на postman
@api_view(["POST"])
def adminLogin(request):
if(request.method=="POST"):
username = request.data["username"]
password = request.data["password"]
authenticated_user = authenticate(request,username=username, password=password)
if authenticated_user != None:
if(authenticated_user.is_authenticated and authenticated_user.is_superuser):
login(request,authenticated_user)
return JsonResponse({"Message":"User is Authenticated. "})
else:
return JsonResponse({"message":"User is not authenticated. "})
else:
return JsonResponse({"Message":"Either User is not registered or password does not match"})
@api_view(["POST"])
def adminLogout(request):
print(request.user)
logout(request)
return JsonResponse({"message":"LoggedOut"})
Вход/выход из системы с помощью REST API не имеет особого смысла. Идея входа/выхода, по крайней мере, как это реализовано в Django, заключается в использовании сессии, то есть с помощью cookie, который имеет идентификатор сессии.
API clients like Postman usually do not work with cookies: each request is made more or less independent of the previous one. If you thus make the next request without a reference to the session, then the view will not link a user to that request. Clients like AJAX that runs on the browser of course can work with cookies, since these are embedded in the browser that manages cookies. You can work with cookies in postman as specified in this tutorial [learning postman], but this is usually not how an API is supposed to work.
Поэтому API обычно работают с токеном, например, токеном JWT. При аутентификации им предоставляется токен, который может быть действителен в течение короткого промежутка времени, и впоследствии он использует этот токен для выполнения любого другого запроса, который должен быть авторизован.
Как говорится в документации по REST-фреймворку Django на странице TokenAuthentication [drf-doc], вы можете определить представления, которые создают и отзывают токены. На странице также обсуждается сеансовая аутентификация, которая может быть использована для AJAX запросов.
Но, скорее всего, вы используете неправильные средства для надлежащей аутентификации для вашего REST API, и вам, возможно, захочется работать с токеном, например, JWT-токеном.