如何使用Django REST framework实现管理员登录和注销?
How to implement admin login and logout using Django REST framework?
我接到了一项任务,以编程方式验证管理员登录和注销。
我可以登录,但是当我检查我正在注销的用户时,我会注销,它说 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 登录 in/logging 没有多大意义。登录 in/logging 的想法,至少 Django 是如何实现它的,是通过会话的方式,因此使用具有会话 ID 的 cookie。
API 像 Postman 这样的客户端通常 不 使用 cookie:每个请求都或多或少地独立于前一个请求。如果您因此在没有引用会话的情况下发出下一个请求,那么视图将不会 link 用户对该请求。在浏览器上运行的 AJAX 等客户端当然可以使用 cookie,因为它们嵌入在管理 cookie 的浏览器中。您可以按照 this tutorial [learning postman] 中指定的方式在邮递员中使用 cookie,但这通常不是 API 应该工作的方式。
这就是为什么 APIs 通常使用令牌,例如 JWT 令牌。进行身份验证时,会为它们提供一个可能在短时间内有效的令牌,随后它会使用该令牌发出任何其他应获得授权的请求。
正如 Django REST framework documentation on TokenAuthentication
[drf-doc] 所说,您可以定义创建和撤销令牌的视图。该页面还讨论了 会话身份验证 ,因此可用于 AJAX 请求。
但是您可能因此使用了错误的方法来为您的 REST API 进行正确的身份验证,因此您可能想要使用像 JWT 令牌这样的令牌。
我接到了一项任务,以编程方式验证管理员登录和注销。
我可以登录,但是当我检查我正在注销的用户时,我会注销,它说 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 登录 in/logging 没有多大意义。登录 in/logging 的想法,至少 Django 是如何实现它的,是通过会话的方式,因此使用具有会话 ID 的 cookie。
API 像 Postman 这样的客户端通常 不 使用 cookie:每个请求都或多或少地独立于前一个请求。如果您因此在没有引用会话的情况下发出下一个请求,那么视图将不会 link 用户对该请求。在浏览器上运行的 AJAX 等客户端当然可以使用 cookie,因为它们嵌入在管理 cookie 的浏览器中。您可以按照 this tutorial [learning postman] 中指定的方式在邮递员中使用 cookie,但这通常不是 API 应该工作的方式。
这就是为什么 APIs 通常使用令牌,例如 JWT 令牌。进行身份验证时,会为它们提供一个可能在短时间内有效的令牌,随后它会使用该令牌发出任何其他应获得授权的请求。
正如 Django REST framework documentation on TokenAuthentication
[drf-doc] 所说,您可以定义创建和撤销令牌的视图。该页面还讨论了 会话身份验证 ,因此可用于 AJAX 请求。
但是您可能因此使用了错误的方法来为您的 REST API 进行正确的身份验证,因此您可能想要使用像 JWT 令牌这样的令牌。