You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

dj-rest-auth的ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION不生效如何解决

问题原因

dj-rest-auth 自带的 VerifyEmailView 重写了父类 ConfirmEmailView 的post方法,完全跳过了 allauth 中LOGIN_ON_EMAIL_CONFIRMATION对应的自动登录逻辑,且父类原逻辑返回的是重定向响应,不适用于JWT的前后端分离场景,因此仅返回验证成功的提示。

解决步骤

1. 自定义邮箱验证视图

创建自定义的VerifyEmailView,在邮箱确认完成后为用户生成JWT凭证返回:

from rest_framework import status
from rest_framework.response import Response
from dj_rest_auth.registration.views import VerifyEmailView
from rest_framework_simplejwt.tokens import RefreshToken
from allauth.account import app_settings as allauth_account_settings

class CustomVerifyEmailView(VerifyEmailView):
    def post(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        self.kwargs['key'] = serializer.validated_data['key']
        confirmation = self.get_object()
        confirmation.confirm(self.request)
        
        # 仅开启自动登录配置时返回JWT凭证,兼容原有配置逻辑
        if allauth_account_settings.LOGIN_ON_EMAIL_CONFIRMATION:
            user = confirmation.email_address.user
            # 生成Simple JWT访问凭证
            refresh = RefreshToken.for_user(user)
            return Response({
                'detail': 'ok',
                'access': str(refresh.access_token),
                'refresh': str(refresh)
            }, status=status.HTTP_200_OK)
        
        return Response({'detail': 'ok'}, status=status.HTTP_200_OK)

注意:需确保django-rest-framework-simplejwt已完成基础配置,令牌生成逻辑才会正常生效。如果需要和现有登录接口返回格式完全统一,也可直接调用dj-rest-auth自带的JWT响应生成方法替换手动生成令牌的逻辑。

2. 替换原有路由

在项目根路由urls.py中,将自定义视图的路由放在dj_rest_auth.registration的路由之前,覆盖原有接口:

from django.urls import path, include
from yourapp.views import CustomVerifyEmailView # 替换为你实际的视图导入路径

urlpatterns = [
    # 覆盖原有邮箱验证接口,必须放在dj_rest_auth的注册路由前面才能生效
    path('dj-rest-auth/registration/verify-email/', CustomVerifyEmailView.as_view(), name='rest_verify_email'),
    # 其他路由
    path('dj-rest-auth/registration/', include('dj_rest_auth.registration.urls')),
    # ... 其余业务路由
]

内容的提问来源于stack exchange,提问作者CSSer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:54:03