2016-09-16 3 views
0

올바르게 이해할 수 있는지 확실하지 않습니다. 장고 Rest 프레임 워크를 사용하여 사용자가 로그인 할 수있게합니다. 사용자 로그인 후 IOS 응용 프로그램 내 경우에는 토큰을 얻고 거기에서 토큰을 사용하여 토큰이 유효한 한 한 번만 로그인해야합니다.Django Rest 프레임 워크 로그인 후 JWT 토큰 받기

나는 사용자 명이나 전자 메일로 로그인하고 curl로 작업하는 토큰을 얻습니다 (JWT 매뉴얼보기와 같이).

어떻게 둘 다 결합합니까? 로그인이 성공하면 로그인 응답 전에 JWT를 호출하고 토큰을 만든 다음 로그인 응답에이를 반환합니다. 응답과 함께 토큰.

이렇게 할 생각이 들지 않아 API 대신 두 가지가 아니라 하나의 호출에서 수행하고 싶습니다. 두 분과 함께 매우 간단하게 보일 수 있지만 필요하지 않은 전화는 내 눈에 띄지 않아야합니다.

class UserLoginSerializer(ModelSerializer): 
    user_id = IntegerField(read_only=True) 
    token = CharField(allow_blank=True, read_only=True) 
    username = CharField(required=False, allow_blank= True) 
    email = EmailField(label='Email Address', required=False, allow_blank= True) 
    class Meta: 
     model = User 
     fields = [ 
      'user_id', 
      'username', 
      'email', 
      'password', 
      'token', 
     ] 
     extra_kwargs = {"password": {"write_only": True}} 

    def validate(self, data): 
     user_obj = None 
     email = data.get("email", None) 
     username = data.get("username", None) 
     password = data["password"] 

     if not email and not username: 
      raise ValidationError("A username or email is required to login.") 

     user = User.objects.filter(
       Q(email=email) | 
       Q(username=username) 
       ).distinct() 
     user = user.exclude(email__isnull=True).exclude(email__iexact='') 

     if user.exists() and user.count() == 1: 
      user_obj = user.first() 
     else: 
      raise ValidationError("This username/email is not valid!") 

     if user_obj: 
      if not user_obj.check_password(password): 
       raise ValidationError("Incorrect credentials, please try again!") 


     data["token"] = "SOME RANDOM TOKEN" 
     data["user_id"] = user_obj.id 

     return data 

나는 내가 필요한 건 그 전에 JWT에서 토큰을 얻을 그리고 난 여기서 뭐하는거야 것처럼 데이터를 반환 할 수있는 방법이며, 데이터에 토큰을 반환하고 있습니다.

감사

+0

jwt보기를 사용하고 있습니까? – arcegk

+0

죄송합니다, 나는 질문을 이해한다고 생각하지 않습니다 .... 장고 휴식 프레임 워크 JWT를 의미합니까? 어떤 의견이 있습니까? "REST framework JWT Auth"라는 Django 프레임 워크가 있는데, 저는 이것을 사용하고 있습니다. "curl -X POST -d"username = admin & password = abc123 "http : // localhost : 8000/api-token-auth/"는 토큰을 생성하고 반환하고 클라이언트에서 서버로 앞뒤로 토큰을 보낼 수 있습니다 ... 나는 장고 rest 프레임 워크에서 호출해야합니다. 그것을하는 방법입니다, 10 배 – Erez

답변

0

당신이하지 말아야 할 django-rest-framework JWT 당신을 위해 모든 토큰을 관리 때문. 단지와

은 :

from rest_framework_jwt.views import obtain_jwt_token 

urlpatterns = [ 
    # ... 

    url(r'^api-token-auth/', obtain_jwt_token), 
] 

당신은 JWT를 얻기 위해 허용됩니다.

또한 settings.py 파일에서 JWT_PAYLOAD_HANDLER를 지정하는 사용자를 생성/로그인 한 후에 사용자 정의 페이로드를 설정할 수 있습니다.