阻止 djoser 添加 API url 到 PASSWORD_RESET_CONFIRM_URL 中设置的前端 url

Stop djoser from adding API url to the frontend url set in PASSWORD_RESET_CONFIRM_URL

我有一个 DRF API 使用 djoser 来处理密码重置。除了 PASSWORD_RESET_CONFIRM_URL

之外,密码重置工作流程运行良好

当我在 Djoser 的设置中设置我的前端页面 URL 时,它一直将 API URL 连接到前端页面 URL。我怎样才能阻止它

有关更多上下文,这里是我的 Djoser 设置,显示了我为 PASSWORD_RESET_CONFIRM_URL

设置的 URL
DJOSER = {
    'PASSWORD_RESET_CONFIRM_URL': 'http://localhost:3000/auth/confirm-password-reset/{uid}/{token}',
    'ACTIVATION_URL': '#/activate/{uid}/{token}',
    'SEND_ACTIVATION_EMAIL': True,
    'PASSWORD_RESET_SHOW_EMAIL_NOT_FOUND': True,
    'PASSWORD_RESET_CONFIRM_RETYPE': True,
    'SERIALIZERS': {
        'password_reset': 'djoser.serializers.SendEmailResetSerializer',
        'password_reset_confirm': 'djoser.serializers.PasswordResetConfirmSerializer',
        'password_reset_confirm_retype': 'djoser.serializers.PasswordResetConfirmRetypeSerializer',
        'set_password': 'djoser.serializers.SetPasswordSerializer',
        'set_password_retype': 'djoser.serializers.SetPasswordRetypeSerializer',
        'current_user': 'djoser.serializers.UserSerializer',
    },
    'PERMISSIONS': {

    }
}


这是我在电子邮件中收到的URL

如你所见http://127.0.0.1:8000 API URL 已添加到前端 URL 我设置

似乎有两种显式设置新域名的方法:

  1. 添加一个DOMAINSITE_NAMEto the Django settings
  2. 使用 Django Sites framework 并在那里设置域名

Sites 通常不是很有用,所以除非其他方法失败,否则请使用 #1。唯一的其他选项是覆盖所有电子邮件模板,因此您可以指定完整的 url.


  1. Djoser只支持paths/fragments,全urls
  2. 链接是使用 {{ protocol }}://{{ domain }}/{{ url|safe }}
  3. 创建的
  4. 一个名为 templated_mail 的包用于发送这些电子邮件
  5. 该软件包设置了 protocoldomainsite_name

电子邮件模板中使用的 code for setting the variables 是:

site = get_current_site(self.request)
domain = context.get('domain') or (
    getattr(settings, 'DOMAIN', '') or site.domain
)
protocol = context.get('protocol') or (
    'https' if self.request.is_secure() else 'http'
)
site_name = context.get('site_name') or (
    getattr(settings, 'SITE_NAME', '') or site.name
)

httphttps 的决定是为您做出的,但由于它们几乎总是相同的,因此在实践中可能不是问题。