diff --git a/apps/authentication/views/dingtalk.py b/apps/authentication/views/dingtalk.py index 0ca03749e..e97424aee 100644 --- a/apps/authentication/views/dingtalk.py +++ b/apps/authentication/views/dingtalk.py @@ -205,12 +205,13 @@ class DingTalkQRLoginView(DingTalkQRMixin, METAMixin, View): permission_classes = (AllowAny,) def get(self, request: HttpRequest): - redirect_url = request.GET.get('redirect_url') + redirect_url = request.GET.get('redirect_url') or reverse('index') + next_url = self.get_next_url_from_meta() or reverse('index') redirect_uri = reverse('authentication:dingtalk-qr-login-callback', external=True) redirect_uri += '?' + urlencode({ 'redirect_url': redirect_url, - 'next': self.get_next_url_from_meta() + 'next': next_url, }) url = self.get_qr_url(redirect_uri) diff --git a/apps/authentication/views/feishu.py b/apps/authentication/views/feishu.py index 88ba6636e..172aa2603 100644 --- a/apps/authentication/views/feishu.py +++ b/apps/authentication/views/feishu.py @@ -170,10 +170,11 @@ class FeiShuQRLoginView(FeiShuQRMixin, View): permission_classes = (AllowAny,) def get(self, request: HttpRequest): - redirect_url = request.GET.get('redirect_url') - + redirect_url = request.GET.get('redirect_url') or reverse('index') redirect_uri = reverse('authentication:feishu-qr-login-callback', external=True) - redirect_uri += '?' + urlencode({'redirect_url': redirect_url}) + redirect_uri += '?' + urlencode({ + 'redirect_url': redirect_url, + }) url = self.get_qr_url(redirect_uri) return HttpResponseRedirect(url) diff --git a/apps/authentication/views/wecom.py b/apps/authentication/views/wecom.py index 5546bf619..9b7963de8 100644 --- a/apps/authentication/views/wecom.py +++ b/apps/authentication/views/wecom.py @@ -201,12 +201,12 @@ class WeComQRLoginView(WeComQRMixin, METAMixin, View): permission_classes = (AllowAny,) def get(self, request: HttpRequest): - redirect_url = request.GET.get('redirect_url') - + redirect_url = request.GET.get('redirect_url') or reverse('index') + next_url = self.get_next_url_from_meta() or reverse('index') redirect_uri = reverse('authentication:wecom-qr-login-callback', external=True) redirect_uri += '?' + urlencode({ 'redirect_url': redirect_url, - 'next': self.get_next_url_from_meta() + 'next': next_url, }) url = self.get_qr_url(redirect_uri) diff --git a/apps/users/utils.py b/apps/users/utils.py index f11d233e4..a2fb9afac 100644 --- a/apps/users/utils.py +++ b/apps/users/utils.py @@ -46,11 +46,13 @@ def get_user_or_pre_auth_user(request): def redirect_user_first_login_or_index(request, redirect_field_name): - url_in_post = request.POST.get(redirect_field_name) - if url_in_post: - return url_in_post - url_in_get = request.GET.get(redirect_field_name, reverse('index')) - return url_in_get + url = request.POST.get(redirect_field_name) + if not url: + url = request.GET.get(redirect_field_name) + # 防止 next 地址为 None + if not url or url.lower() in ['none']: + url = reverse('index') + return url def generate_otp_uri(username, otp_secret_key=None, issuer="JumpServer"):