Как обрабатывать URL-адрес активации с помощью Django Djoser?

Я не могу активировать пользователей по ссылке для активации.

Как мне правильно настроить путь для обработки их запроса?

Моя конфигурация:

DJOSER = {
    'PASSWORD_RESET_CONFIRM_URL': 'api/v1/auth/users/password/reset/confirm/{uid}/{token}',
    'USERNAME_RESET_CONFIRM_URL': 'api/v1/auth/users/username/reset/confirm/{uid}/{token}',
    'ACTIVATION_URL': 'api/v1/auth/users/activate/{uid}/{token}',
    'SEND_ACTIVATION_EMAIL': True,
    'SEND_CONFIRMATION_EMAIL': True,
    'SERIALIZERS': {},
    # 'USER_ID_FIELD': '',
    'LOGIN_FIELD': 'username',
    'USER_CREATE_PASSWORD_RETYPE': True,
    'SET_USERNAME_RETYPE': True,
    'USERNAME_RESET_CONFIRM_RETYPE': True,
    'SOCIAL_AUTH_ALLOWED_REDIRECT_URIS': [],
    'HIDE_USERS': True,
    'EMAIL': {
        'activation': 'api.email.ActivationEmail',
        'confirmation': 'api.email.ConfirmationEmail',
        'password_reset': 'api.email.PasswordResetEmail',
        'password_changed_confirmation': 'api.email.PasswordChangedConfirmationEmail',
        'username_changed_confirmation': 'api.email.UsernameChangedConfirmationEmail',
        'username_reset': 'api.email.UsernameResetEmail',
    }
}


   path('auth/', include('djoser.urls')),
   path('auth/', include('djoser.urls.jwt')),
   path('auth/', include('djoser.urls.authtoken')),

person Community    schedule 28.12.2019    source источник


Ответы (1)


Мне пришлось указать конечную точку, где uid и токен будут включены в параметры. Эта конечная точка направлена ​​на представление, которое будет обрабатывать эти параметры. Затем отправьте почтовый запрос в конечную точку активации djoser. мы не можем напрямую использовать URL-адрес, предоставленный djoser, потому что он ожидает почтового запроса, тогда как пользователь отправит запрос на получение, щелкнув ссылку в электронном письме. параметр:

DJOSER = {
 'ACTIVATION_URL': 'account-activate/{uid}/{token}/',
}

Посмотреть:

class ActivateUser(GenericAPIView):

    def get(self, request, uid, token, format = None):
        payload = {'uid': uid, 'token': token}

        url = "http://localhost:8000/api/v1/auth/users/activation/"
        response = requests.post(url, data = payload)

        if response.status_code == 204:
            return Response({}, response.status_code)
        else:
            return Response(response.json())

аналогичное решение здесь, но djoser обновился, так как они опубликовали свой ответ и мне пришлось внести некоторые изменения.

person Community    schedule 30.12.2019