我正在使用 django Rest Framework jwt 身份验证。我成功获取token并可以将token添加到cookie中。但是,当我尝试访问需要登录的 View 时,JWT 身份验证不起作用。始终重定向到 login.html。
Http请求头:
Authorization: JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjozLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNTA1NjU3NDgwLCJlbWFpbCI6ImFkbWluQGdtYWlsLmNvbSJ9.Ro507cIEisRle_iKgH4dm3-tSbrrsaCUYtP2CIK9jLM
Cookie: token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjozLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNTA1NjU3NDgwLCJlbWFpbCI6ImFkbWluQGdtYWlsLmNvbSJ9.Ro507cIEisRle_iKgH4dm3-tSbrrsaCUYtP2CIK9jLM
class SystemUserView(View):
@method_decorator(login_required)
def get(self, request, user_id):
users = list(User.objects.all().values('email', 'id', 'username'))
return HttpResponse(HttpResponse(json.dumps(users), content_type="application/json"))
网址:
from django.conf.urls import url
from . import views
from .views import SystemUserView, UserAuthenticationView
from rest_framework_jwt.views import obtain_jwt_token, refresh_jwt_token, verify_jwt_token
urlpatterns = [
url(r'^$', views.index, name="index"),
url(r'^login/?$', UserAuthenticationView.login, name="index"),
url(r'^user/(?P<user_id>[0-9]+)/$', SystemUserView.as_view(), name='user'),
url(r'^api-token-auth/', obtain_jwt_token),
url(r'^api-token-refresh/', refresh_jwt_token),
url(r'^api-token-verify/', verify_jwt_token),
]
Django 版本:(1, 11, 5, '最终', 0)
Python 3.6.2
最佳答案
class SystemUserView(View):
看起来您正在导入 Django View ,而不是 DRF APIView 。 DRF 和 Django 使用不同的身份验证系统。如果您使用 JWT 针对 DRF 进行了身份验证,Django Views 仍会将您重定向到登录页面。
以下是使用普通 token 身份验证的 DRF View 示例。我还没有测试过它,您必须将其适应 JWT,但它应该会引导您走上正确的道路。
from rest_framework import authentication, permissions
from django.contrib.auth.models import User
class ListUsers(APIView):
"""
View to list all users in the system.
* Requires token authentication.
"""
authentication_classes = (authentication.TokenAuthentication,)
permission_classes = (permissions.IsAuthenticated,)
def get(self, request, user_id):
"""
Return a list of all users.
"""
users = list(User.objects.all().values('email', 'id', 'username'))
return Response(users)
此外,请考虑使用 DRF serializer用于将用户对象转换为 json。
关于python - 需要 Django Rest Framework JWT 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46265104/