저는 사용자를 돌려 주길 원했고 전자 메일이나 사용자 이름 로그인도 허용하기 위해 동일한 여행을했습니다. 문서가 완전히 명확하지는 않지만 인증 토큰에 대해 설명한 것처럼 JWT에서도 동일한 작업을 수행 할 수 있습니다. obtain_jwt_token은 JSONWebToken을 획득하므로 obtain_auth_token은 ObtainAuthToken을 가져옵니다. 이 내 덮어 로그인 방법 :
from django.contrib.auth.models import User
from api.serializers import UserSerializer
from rest_framework.response import Response
from rest_framework import status
from rest_framework_jwt.settings import api_settings
from rest_framework_jwt.views import ObtainJSONWebToken
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
jwt_decode_handler = api_settings.JWT_DECODE_HANDLER
class LoginView(ObtainJSONWebToken):
def post(self, request, *args, **kwargs):
# by default attempts username/passsword combination
response = super(LoginView, self).post(request, *args, **kwargs)
# token = response.data['token'] # don't use this to prevent errors
# below will return null, but not an error, if not found :)
res = response.data
token = res.get('token')
# token ok, get user
if token:
user = jwt_decode_handler(token) # aleady json - don't serialize
else: # if none, try auth by email
req = request.data # try and find email in request
email = req.get('email')
password = req.get('password')
username = req.get('username')
if email is None or password is None:
return Response({'success': False,
'message': 'Missing or incorrect credentials',
'data': req},
status=status.HTTP_400_BAD_REQUEST)
# email exists in request, try to find user
try:
user = User.objects.get(email=email)
except:
return Response({'success': False,
'message': 'User not found',
'data': req},
status=status.HTTP_404_NOT_FOUND)
if not user.check_password(password):
return Response({'success': False,
'message': 'Incorrect password',
'data': req},
status=status.HTTP_403_FORBIDDEN)
# make token from user found by email
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)
user = UserSerializer(user).data
return Response({'success': True,
'message': 'Successfully logged in',
'token': token,
'user': user},
status=status.HTTP_200_OK)
당신은 당신이 경우하시기 바랍니다 장고의 인증 모델을 사용자 정의하여 이메일로 확인하는 기본값을 변경할 수 있지만, 나는 두 가지 옵션을 가지고 행복했다.
API 상용구를 만들기 시작했습니다. require.txt 파일과 config.example.py 파일은 나머지를보기 위해 아래로 당기기를 원하는 사람들을위한 것이다. https://github.com/garyburgmann/django-api-boilerplate
나는 당신이하려는 것을 정확하게 이해하지 못합니다. 어쩌면 당신이 당신의 목표와 실제 코드의 더 좋은 예를 가지고 있다면. JWT의 경우 http://getblimp.github.io/django-rest-framework-jwt/를 사용하면 jwt 응답을 아주 쉽게 사용자 정의 할 수 있습니다. –
맞다면 몇 가지 기준에 따라 토큰을 반환하도록 사용자 정의하려고합니다. 무작위 추측. –