阻止 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 我设置
似乎有两种显式设置新域名的方法:
- 添加一个
DOMAIN
和SITE_NAME
to the Django settings
- 使用 Django Sites framework 并在那里设置域名
Sites 通常不是很有用,所以除非其他方法失败,否则请使用 #1。唯一的其他选项是覆盖所有电子邮件模板,因此您可以指定完整的 url.
- Djoser只支持paths/fragments,不全urls
- 链接是使用
{{ protocol }}://{{ domain }}/{{ url|safe }}
创建的
- 一个名为
templated_mail
的包用于发送这些电子邮件
- 该软件包设置了
protocol
、domain
和 site_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
)
http
与 https
的决定是为您做出的,但由于它们几乎总是相同的,因此在实践中可能不是问题。
我有一个 DRF API 使用 djoser 来处理密码重置。除了 PASSWORD_RESET_CONFIRM_URL
当我在 Djoser 的设置中设置我的前端页面 URL 时,它一直将 API URL 连接到前端页面 URL。我怎样才能阻止它
有关更多上下文,这里是我的 Djoser 设置,显示了我为 PASSWORD_RESET_CONFIRM_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 我设置
似乎有两种显式设置新域名的方法:
- 添加一个
DOMAIN
和SITE_NAME
to the Django settings - 使用 Django Sites framework 并在那里设置域名
Sites 通常不是很有用,所以除非其他方法失败,否则请使用 #1。唯一的其他选项是覆盖所有电子邮件模板,因此您可以指定完整的 url.
- Djoser只支持paths/fragments,不全urls
- 链接是使用
{{ protocol }}://{{ domain }}/{{ url|safe }}
创建的
- 一个名为
templated_mail
的包用于发送这些电子邮件 - 该软件包设置了
protocol
、domain
和site_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
)
http
与 https
的决定是为您做出的,但由于它们几乎总是相同的,因此在实践中可能不是问题。