From 55e8e34226922594fac816e8fb136ecd961c8f57 Mon Sep 17 00:00:00 2001 From: wangruidong <940853815@qq.com> Date: Fri, 30 Aug 2024 17:57:48 +0800 Subject: [PATCH] fix: 500 error caused by duplicate email or username --- apps/authentication/backends/oidc/views.py | 13 +++++++++++-- apps/i18n/core/ja/LC_MESSAGES/django.po | 20 ++++++++++++++++++-- apps/i18n/core/zh/LC_MESSAGES/django.po | 17 +++++++++++++++-- apps/i18n/core/zh_Hant/LC_MESSAGES/django.po | 16 ++++++++++++++-- 4 files changed, 58 insertions(+), 8 deletions(-) diff --git a/apps/authentication/backends/oidc/views.py b/apps/authentication/backends/oidc/views.py index 56c1e4fb0..117c46c56 100644 --- a/apps/authentication/backends/oidc/views.py +++ b/apps/authentication/backends/oidc/views.py @@ -17,13 +17,16 @@ import time from django.conf import settings from django.contrib import auth from django.core.exceptions import SuspiciousOperation +from django.db import IntegrityError from django.http import HttpResponseRedirect, QueryDict from django.urls import reverse from django.utils.crypto import get_random_string from django.utils.http import urlencode from django.views.generic import View +from django.utils.translation import gettext_lazy as _ from authentication.utils import build_absolute_uri_for_oidc +from authentication.views.mixins import FlashMessageMixin from common.utils import safe_next_url from .utils import get_logger @@ -113,7 +116,7 @@ class OIDCAuthRequestView(View): return HttpResponseRedirect(redirect_url) -class OIDCAuthCallbackView(View): +class OIDCAuthCallbackView(View, FlashMessageMixin): """ Allows to complete the authentication process. This view acts as the main endpoint to complete the authentication process involving the OIDC @@ -165,7 +168,13 @@ class OIDCAuthCallbackView(View): next_url = request.session.get('oidc_auth_next_url', None) code_verifier = request.session.get('oidc_auth_code_verifier', None) logger.debug(log_prompt.format('Process authenticate')) - user = auth.authenticate(nonce=nonce, request=request, code_verifier=code_verifier) + try: + user = auth.authenticate(nonce=nonce, request=request, code_verifier=code_verifier) + except IntegrityError: + title = _("OpenID Error") + msg = _('Username or email already exists, Please check') + response = self.get_failed_response('/', title, msg) + return response if user: logger.debug(log_prompt.format('Login: {}'.format(user))) auth.login(self.request, user) diff --git a/apps/i18n/core/ja/LC_MESSAGES/django.po b/apps/i18n/core/ja/LC_MESSAGES/django.po index 95e4e78bf..fba291bfa 100644 --- a/apps/i18n/core/ja/LC_MESSAGES/django.po +++ b/apps/i18n/core/ja/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-30 15:08+0800\n" +"POT-Creation-Date: 2024-09-02 10:59+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1140,7 +1140,15 @@ msgstr "パスワード変更記録とプッシュ記録を定期的にクリア #: accounts/tasks/automation.py:87 msgid "Clean change secret and push record period description" -msgstr "システムは、変更タスク、実行レコード、資産、アカウントに関連するものを含め、不要な変更シークレット レコードとプッシュ レコードを定期的にクリーンアップします。これらの関連項目のいずれかが削除されると、対応する変更シークレット レコードとプッシュ レコードは無効になります。したがって、整然とした効率的なデータベースを維持するために、システムはデフォルトでこれらの無効なレコードを 180 日ごとに自動的にクリーンアップします。この定期的なクリーンアップ プロセスにより、ストレージ領域が解放され、データ管理のセキュリティと全体的なパフォーマンスが向上します。" +msgstr "" +"システムは、変更タスク、実行レコード、資産、アカウントに関連するものを含め、" +"不要な変更シークレット レコードとプッシュ レコードを定期的にクリーンアップし" +"ます。これらの関連項目のいずれかが削除されると、対応する変更シークレット レ" +"コードとプッシュ レコードは無効になります。したがって、整然とした効率的なデー" +"タベースを維持するために、システムはデフォルトでこれらの無効なレコードを 180 " +"日ごとに自動的にクリーンアップします。この定期的なクリーンアップ プロセスによ" +"り、ストレージ領域が解放され、データ管理のセキュリティと全体的なパフォーマン" +"スが向上します。" #: accounts/tasks/backup_account.py:25 msgid "Execute account backup plan" @@ -2972,6 +2980,14 @@ msgstr "" msgid "Invalid token or cache refreshed." msgstr "無効なトークンまたはキャッシュの更新。" +#: authentication/backends/oidc/views.py:174 +msgid "OpenID Error" +msgstr "OpenID エラー" + +#: authentication/backends/oidc/views.py:175 +msgid "Username or email already exists, Please check" +msgstr "ユーザー名またはメールアドレスが既に存在しています。ご確認ください" + #: authentication/backends/passkey/api.py:37 msgid "Only register passkey for local user" msgstr "ローカル・ユーザーのみの鍵の登録" diff --git a/apps/i18n/core/zh/LC_MESSAGES/django.po b/apps/i18n/core/zh/LC_MESSAGES/django.po index c3767dc92..385f7d7d2 100644 --- a/apps/i18n/core/zh/LC_MESSAGES/django.po +++ b/apps/i18n/core/zh/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: JumpServer 0.3.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-30 15:08+0800\n" +"POT-Creation-Date: 2024-09-02 10:59+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\n" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" @@ -1136,7 +1136,12 @@ msgstr "周期清理改密记录和推送记录" #: accounts/tasks/automation.py:87 msgid "Clean change secret and push record period description" -msgstr "系统会定期清理不再需要的改密记录和推送记录,包括那些关联的改密任务、执行记录、资产和账号。当这些关联项中的任意一个被删除时,对应的改密和推送记录将变为无效。因此,为了保持数据库的整洁和高效运行,系统默认每180天自动清理这些无效记录。这种定期清理机制不仅有助于释放存储空间,还能提高数据管理的安全性和整体性能。" +msgstr "" +"系统会定期清理不再需要的改密记录和推送记录,包括那些关联的改密任务、执行记" +"录、资产和账号。当这些关联项中的任意一个被删除时,对应的改密和推送记录将变为" +"无效。因此,为了保持数据库的整洁和高效运行,系统默认每180天自动清理这些无效记" +"录。这种定期清理机制不仅有助于释放存储空间,还能提高数据管理的安全性和整体性" +"能。" #: accounts/tasks/backup_account.py:25 msgid "Execute account backup plan" @@ -2942,6 +2947,14 @@ msgstr "无效的令牌头。符号字符串不应包含无效字符。" msgid "Invalid token or cache refreshed." msgstr "刷新的令牌或缓存无效。" +#: authentication/backends/oidc/views.py:174 +msgid "OpenID Error" +msgstr "OpenID 错误" + +#: authentication/backends/oidc/views.py:175 +msgid "Username or email already exists, Please check" +msgstr "用户名或者邮箱已经存在,请检查" + #: authentication/backends/passkey/api.py:37 msgid "Only register passkey for local user" msgstr "仅为本地用户注册密钥" diff --git a/apps/i18n/core/zh_Hant/LC_MESSAGES/django.po b/apps/i18n/core/zh_Hant/LC_MESSAGES/django.po index 0a1e2db6f..d13397912 100644 --- a/apps/i18n/core/zh_Hant/LC_MESSAGES/django.po +++ b/apps/i18n/core/zh_Hant/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: JumpServer 0.3.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-08-30 15:08+0800\n" +"POT-Creation-Date: 2024-09-02 10:59+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\n" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" @@ -1138,7 +1138,11 @@ msgstr "週期清理改密記錄和推送記錄" #: accounts/tasks/automation.py:87 msgid "Clean change secret and push record period description" -msgstr "系統會定期清理不必要的變更密文記錄和推播記錄,包括與變更任務、執行記錄、資產、帳戶相關的記錄。當任何這些關聯項被刪除時,相應的變更秘密和推送記錄將變得無效。因此,為了保持資料庫整潔、高效,系統預設每180天自動清理一次這些無效記錄。這種定期清理過程有助於釋放儲存空間並提高資料管理的安全性和整體效能。" +msgstr "" +"系統會定期清理不必要的變更密文記錄和推播記錄,包括與變更任務、執行記錄、資" +"產、帳戶相關的記錄。當任何這些關聯項被刪除時,相應的變更秘密和推送記錄將變得" +"無效。因此,為了保持資料庫整潔、高效,系統預設每180天自動清理一次這些無效記" +"錄。這種定期清理過程有助於釋放儲存空間並提高資料管理的安全性和整體效能。" #: accounts/tasks/backup_account.py:25 msgid "Execute account backup plan" @@ -2944,6 +2948,14 @@ msgstr "無效的令牌頭。符號字串不應包含無效字元。" msgid "Invalid token or cache refreshed." msgstr "刷新的令牌或快取無效。" +#: authentication/backends/oidc/views.py:174 +msgid "OpenID Error" +msgstr "OpenID 錯誤" + +#: authentication/backends/oidc/views.py:175 +msgid "Username or email already exists, Please check" +msgstr "使用者名稱或者電子郵件已經存在,請檢查" + #: authentication/backends/passkey/api.py:37 msgid "Only register passkey for local user" msgstr "僅為本地用戶註冊金鑰"