def get(self, request, activation_key): """ View for confirm email. Receive an activation key as parameter and confirm email. """ user = get_object_or_404(User, activation_key=str(activation_key)) if user.confirm_email(): return Response(status=status.HTTP_200_OK) log.warning(message='Email confirmation key not found.', details={'http_status_code': status.HTTP_404_NOT_FOUND}) return Response(status=status.HTTP_404_NOT_FOUND)
def post(self, request): """ User login view. Based on JSONWebTokenAPIView from rest_framework_jwt. """ serializer = self.serializer_class(data=request.data) if serializer.is_valid(): user = serializer.object.get('user') or request.user token = serializer.object.get('token') response_data = jwt_response_payload_handler(token, user, request) return Response(response_data) log.warning(message='Authentication failed.', details={'http_status_code': status.HTTP_401_UNAUTHORIZED}) return Response(serializer.errors, status=status.HTTP_401_UNAUTHORIZED)
def post(self, request): """User login view.""" log.info('UserLoginRegisterView::post::data: {}'.format( json.dumps(request.data))) try: access_token = request.data['access_token'] graph_api = facebook.GraphAPI( access_token=access_token, version=settings.FACEBOOK_GRAPH_API_VERSION) facebook_user = accounts.v1.utils.get_facebook_user(graph_api) long_lived_fb_token = accounts.v1.utils.generate_long_lived_fb_token( access_token, graph_api) except KeyError: log.warning( message='Authentication failed.', details={'http_status_code': status.HTTP_400_BAD_REQUEST}) return Response({'access_token': ['This field is required.']}, status=status.HTTP_400_BAD_REQUEST) except FacebookInvalidTokenException as error: log.warning( message='Authentication failed.', details={'http_status_code': status.HTTP_400_BAD_REQUEST}) return Response({'access_token': [str(error)]}, status=status.HTTP_400_BAD_REQUEST) facebook_user['facebook_uid'] = facebook_user.pop('id') facebook_user['facebook_access_token'] = long_lived_fb_token facebook_user.update(request.data) temporary_email = False if 'email' not in facebook_user: temporary_email = True facebook_user['email'] = 'temporary_{}@temporary.com'.format( facebook_user['facebook_uid']) serializer = self.get_serializer(data=facebook_user) serializer.is_valid(raise_exception=True) user = serializer.create(serializer.validated_data) update_last_login(None, user) outdated = ('app_version' in request.data and float( request.data['app_version']) < settings.CURRENT_APP_VERSION) # create token token = AuthToken.objects.create(user) email = '' if temporary_email else user.email response_data = { 'token': token, 'outdated': outdated, 'user': { 'id': user.id, 'one_signal_id': user.one_signal_id, 'facebook_access_token': user.facebook_access_token, 'facebook_uid': user.facebook_uid, 'first_name': user.first_name, 'last_name': user.last_name, 'email': email, 'phone_number': str(user.phone_number) } } return Response(response_data, status=status.HTTP_200_OK)