2017-09-17 4 views
0

나는 django rest framework jwt 인증을 사용하고 있습니다. 토큰을 성공적으로 가져오고 토큰을 쿠키에 추가 할 수 있습니다. 하지만 로그인이 필요한보기에 도달하려고하면 JWT 인증이 작동하지 않습니다. 항상 login.html로 리디렉션됩니다.Django Rest Framwork JWT 로그인 필요

HTTP 요청 헤더 :

권한 : JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjozLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNTA1NjU3NDgwLCJlbWFpbCI6ImFkbWluQGdtYWlsLmNvbSJ9.Ro507cIEisRle_iKgH4dm3-tSbrrsaCUYtP2CIK9jLM

쿠키 : 토큰 = eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjozLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNTA1NjU3NDgwLCJlbWFpbCI6ImFkbWluQGdtYWlsLmNvbSJ9.Ro507cIEisRle_iKgH4dm3-tSbrrsaCUYtP2CIK9jLM

012 3,516,
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")) 

URL은 :

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), 
] 

나는 장고하는 초보자입니다, 그래서 경우 덤프 질문은 용서.

장고 버전 : 당신이 장고보기를하지 가져처럼 (1, 11, 5, '최종', 0)

파이썬 3.6.2

https://getblimp.github.io/django-rest-framework-jwt/

+0

django의 버전은 무엇입니까? – Tractatus

답변

1
class SystemUserView(View): 

이 보이는 DRF APIView. DRF와 Django는 서로 다른 인증 시스템을 사용합니다. JWT로 DRF를 인증 받았다면 Django Views는 여전히 로그인 페이지로 리디렉션합니다.

다음은 일반적인 토큰 인증을 사용하는 DRF보기의 예입니다. 나는 그것을 테스트하지 않았고 당신은 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) 

또한, JSON으로 사용자 개체를 변환하는 DRF serializer 사용을 고려하시기 바랍니다.

+0

감사합니다. 이제 사용자가 인증/로그인되지 않은 경우 사용자를 리디렉션하는 가장 좋은 방법은 무엇입니까? – RockOnGom

+0

귀하의 질문에 무슨 뜻인지 확신 할 수 없습니다. 죄송합니다. 사용자가 인증되지 않으면 DRF는 HTTP 403 오류를 반환하고 APIView는 호출되지 않습니다. 이것이 API의 올바른 동작이므로이 경우를 실제로 처리 할 필요가 없습니다. –

+0

그래서 좀 더 자세한 정보를 알려 드리겠습니다. 토큰 인증을 사용하는 웹 사이트를 개발하려고합니다. (쿠키에 토큰을 보관합니다). 그래서 사용자가 인증되지 않은 경우 사용자를 로그인 페이지로 리디렉션하고 싶습니다. 사용자가 작동 권한이 없으면 사용자를 you_are_not_allowed_to_see.html로 리디렉션해야합니다. django보기에는 login_required decarator가 있습니다. 사용자가 로그인하지 않으면 LOGIN_URL로 리디렉션됩니다. JWT를 사용하려는 동기는 로그인 제어에 불과합니다. 나는 뭔가를 놓치고 잘못 했는가? – RockOnGom

관련 문제