fix: 修复企业微信、钉钉、飞书登录跳转问题

This commit is contained in:
Jiangjie.Bai 2022-05-17 18:50:16 +08:00 committed by Jiangjie.Bai
parent 07779c5a7a
commit 0fc5a33983
4 changed files with 17 additions and 13 deletions

View File

@ -205,12 +205,13 @@ class DingTalkQRLoginView(DingTalkQRMixin, METAMixin, View):
permission_classes = (AllowAny,) permission_classes = (AllowAny,)
def get(self, request: HttpRequest): 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 = reverse('authentication:dingtalk-qr-login-callback', external=True)
redirect_uri += '?' + urlencode({ redirect_uri += '?' + urlencode({
'redirect_url': redirect_url, 'redirect_url': redirect_url,
'next': self.get_next_url_from_meta() 'next': next_url,
}) })
url = self.get_qr_url(redirect_uri) url = self.get_qr_url(redirect_uri)

View File

@ -170,10 +170,11 @@ class FeiShuQRLoginView(FeiShuQRMixin, View):
permission_classes = (AllowAny,) permission_classes = (AllowAny,)
def get(self, request: HttpRequest): 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 = 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) url = self.get_qr_url(redirect_uri)
return HttpResponseRedirect(url) return HttpResponseRedirect(url)

View File

@ -201,12 +201,12 @@ class WeComQRLoginView(WeComQRMixin, METAMixin, View):
permission_classes = (AllowAny,) permission_classes = (AllowAny,)
def get(self, request: HttpRequest): 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 = reverse('authentication:wecom-qr-login-callback', external=True)
redirect_uri += '?' + urlencode({ redirect_uri += '?' + urlencode({
'redirect_url': redirect_url, 'redirect_url': redirect_url,
'next': self.get_next_url_from_meta() 'next': next_url,
}) })
url = self.get_qr_url(redirect_uri) url = self.get_qr_url(redirect_uri)

View File

@ -46,11 +46,13 @@ def get_user_or_pre_auth_user(request):
def redirect_user_first_login_or_index(request, redirect_field_name): def redirect_user_first_login_or_index(request, redirect_field_name):
url_in_post = request.POST.get(redirect_field_name) url = request.POST.get(redirect_field_name)
if url_in_post: if not url:
return url_in_post url = request.GET.get(redirect_field_name)
url_in_get = request.GET.get(redirect_field_name, reverse('index')) # 防止 next 地址为 None
return url_in_get if not url or url.lower() in ['none']:
url = reverse('index')
return url
def generate_otp_uri(username, otp_secret_key=None, issuer="JumpServer"): def generate_otp_uri(username, otp_secret_key=None, issuer="JumpServer"):