perf: 优化oauth2登录未激活用户时,会重复跳转登录问题

pull/12763/head
jiangweidong 2024-03-06 14:49:20 +08:00 committed by Bryan
parent a7a099f290
commit 670eac49b6
1 changed files with 10 additions and 2 deletions

View File

@ -4,10 +4,13 @@ from django.contrib import auth
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.urls import reverse from django.urls import reverse
from django.utils.http import urlencode from django.utils.http import urlencode
from django.utils.translation import gettext_lazy as _
from authentication.utils import build_absolute_uri from authentication.utils import build_absolute_uri
from common.utils import get_logger from authentication.views.mixins import FlashMessageMixin
from authentication.mixins import authenticate from authentication.mixins import authenticate
from common.utils import get_logger
logger = get_logger(__file__) logger = get_logger(__file__)
@ -39,7 +42,7 @@ class OAuth2AuthRequestView(View):
return HttpResponseRedirect(redirect_url) return HttpResponseRedirect(redirect_url)
class OAuth2AuthCallbackView(View): class OAuth2AuthCallbackView(View, FlashMessageMixin):
http_method_names = ['get', ] http_method_names = ['get', ]
def get(self, request): def get(self, request):
@ -51,6 +54,11 @@ class OAuth2AuthCallbackView(View):
if 'code' in callback_params: if 'code' in callback_params:
logger.debug(log_prompt.format('Process authenticate')) logger.debug(log_prompt.format('Process authenticate'))
user = authenticate(code=callback_params['code'], request=request) user = authenticate(code=callback_params['code'], request=request)
if err_msg := getattr(request, 'error_message', ''):
login_url = reverse('authentication:login') + '?admin=1'
return self.get_failed_response(login_url, title=_('Authentication failed'), msg=err_msg)
if user and user.is_valid: if user and user.is_valid:
logger.debug(log_prompt.format('Login: {}'.format(user))) logger.debug(log_prompt.format('Login: {}'.format(user)))
auth.login(self.request, user) auth.login(self.request, user)