首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dj-rest-auth重置电子邮件链接一直指向后端

dj-rest-auth重置电子邮件链接一直指向后端
EN

Stack Overflow用户
提问于 2022-05-05 14:56:12
回答 1查看 182关注 0票数 0

我使用dj- react和react,并且我尝试使用前端url而不是后端url。解决方案,我正在使用的帐户创建确认电子邮件也影响重置密码电子邮件,但只是部分。它不会影响端口。它只尝试在没有的情况下向重置链接添加一个键,并抛出一个错误。

所以我想知道是否有办法将url从端口8000更改为端口3000。这就是我尝试过的:

代码语言:javascript
复制
class AccountAdapter(DefaultAccountAdapter):
    def is_open_for_signup(self, request: HttpRequest):
        return getattr(settings, "ACCOUNT_ALLOW_REGISTRATION", True)

    def send_mail(self, template_prefix, email, context):
        if settings.DEBUG:
            context["activate_url"] = (
                "http://localhost:3000/accounts/confirm-email/" + context["key"]
            )
        else:
            context["activate_url"] = (
                settings.FRONTEND_URL + "/accounts/confirm-email/" + context["key"]
            )
        return super().send_mail(template_prefix, email, context)

如果我摆脱了关键的部分,它不会给我一个错误,但保留端口8000,并打破我的帐户确认电子邮件。如果我不把钥匙扔掉它给我的是:

代码语言:javascript
复制
django          |     "http://localhost:3000/accounts/confirm-email/" + context["key"]
django          | KeyError: 'key'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-09 06:08:00

这个帮我修好了:https://stackoverflow.com/a/70624462/3530084

serializers.py

代码语言:javascript
复制
class CustomAllAuthPasswordResetForm(AllAuthPasswordResetForm):
    def save(self, request, **kwargs):
        current_site = get_current_site(request)
        email = self.cleaned_data['email']
        token_generator = kwargs.get('token_generator',
                                     default_token_generator)

        for user in self.users:

            temp_key = token_generator.make_token(user)

            # save it to the password reset model
            # password_reset = PasswordReset(user=user, temp_key=temp_key)
            # password_reset.save()

            # send the password reset email
            path = reverse(
                'password_reset_confirm',
                args=[user_pk_to_url_str(user), temp_key],
            )
            url = build_absolute_uri(None, path) # PASS NONE INSTEAD OF REQUEST

            context = {
                'current_site': current_site,
                'user': user,
                'password_reset_url': url,
                'request': request,
            }
            if app_settings.AUTHENTICATION_METHOD != app_settings.AuthenticationMethod.EMAIL:
                context['username'] = user_username(user)
            get_adapter(request).send_mail('account/email/password_reset_key',
                                           email, context)
        return self.cleaned_data['email']

class CustomPasswordResetSerializer(PasswordResetSerializer):
    @property
    def password_reset_form_class(self):
        return CustomAllAuthPasswordResetForm

settings.py

代码语言:javascript
复制
REST_AUTH_SERIALIZERS = {
    'PASSWORD_RESET_SERIALIZER':
    'seniorpark.users.api.serializers.CustomPasswordResetSerializer',
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72129316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档