我收到了一项任务,以编程方式验证管理员登录并注销。
我可以登录,但在注销时,当我检查要注销的用户时,它显示 AnonymousUser。如何确保我注销了当前登录的用户。
我正在使用 Django REST 框架并在 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 是如何实现的,是通过 session 来实现的,因此使用具有 session ID 的 cookie。
像 Postman 这样的 API 客户端通常不使用 cookie:每个请求或多或少都独立于前一个请求。如果您在不引用 session 的情况下发出下一个请求,则 View 将不会将用户链接到该请求。像 AJAX 这样在浏览器上运行的客户端当然可以使用 cookie,因为它们嵌入在管理 cookie 的浏览器中。您可以按照 this tutorial [learning postman] 中的指定在 postman 中使用 cookie。 ,但这通常不是 API 应该工作的方式。
这就是 API 通常使用 token (例如 JWT token )的原因。进行身份验证时,它们会获得一个可能在短时间内有效的 token ,随后它使用该 token 发出应授权的任何其他请求。
作为Django REST framework documentation on TokenAuthentication
[drf-doc]也就是说,您可以定义创建和撤销 token 的 View 。该页面还讨论了可用于 AJAX 请求的 session 身份验证。
但是您可能使用了错误的方法来对 REST API 进行正确的身份验证,因此您可能希望使用 JWT token 之类的 token 。
关于django - 如何使用Django REST框架实现管理员登录和注销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71495338/