如何使用 Django Djoser 处理激活 url?

Posted

技术标签:

【中文标题】如何使用 Django Djoser 处理激活 url?【英文标题】:How to handle activation url with Django Djoser? 【发布时间】:2020-04-17 21:16:06 【问题描述】:

我无法通过激活链接激活用户。

如何正确配置路径来处理他们的请求?

我的配置:

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

【问题讨论】:

【参考方案1】:

我必须指定一个端点,其中 uid 和令牌将包含在参数中。该端点指向将处理这些参数的视图。然后向 djoser 激活端点发送一个 post 请求。我们不能直接使用 djoser 给出的 url,因为它需要一个 post 请求,而用户将通过单击电子邮件中的链接提交一个 get 请求。 设置:

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())

类似的解决方案 here 但 djoser 更新了,因为他们发布了他们的答案,我不得不进行一些更改。

【讨论】:

以上是关于如何使用 Django Djoser 处理激活 url?的主要内容,如果未能解决你的问题,请参考以下文章

Djoser:触发用户帐户激活操作

Django Rest Framework djoser 激活问题

Djoser 用户激活电子邮件 POST 示例

DRF:如何将 django-rest-framework-jwt 集成到 Djoser

Django Djoser:电子邮件地址重置

django-rest-auth vs djoser,哪一个用于社交身份验证?