mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2026-09-22 16:00:51 +00:00
refine passkey prerequisite checks and i18n guidance
This commit is contained in:
@@ -1995,9 +1995,16 @@ const message = {
|
||||
'Only requests from these IP/CIDR sources will trust Forwarded and X-Forwarded-Proto when determining HTTPS',
|
||||
passkeyNotSupported: 'Current browser or environment does not support passkeys',
|
||||
passkeyPrereqTitle: 'The following prerequisites are required for Passkey',
|
||||
passkeyPrereqBindDomain: 'Domain name configured',
|
||||
passkeyPrereqHttps: 'HTTPS / Secure context',
|
||||
passkeyPrereqBrowser: 'Browser supports WebAuthn',
|
||||
passkeyPrereqBindDomain: '1Panel domain binding configured',
|
||||
passkeyPrereqHttps: 'Accessed securely via HTTPS',
|
||||
passkeyPrereqBrowser: 'Environment supports Passkey (WebAuthn + platform authenticator)',
|
||||
passkeyPrereqBrowserDetailWebAuthnUnavailable:
|
||||
'Use a system browser and make sure the panel is opened over HTTPS with a bound domain.',
|
||||
passkeyPrereqBrowserDetailPlatformCapabilityUnavailable:
|
||||
'This environment cannot use device authentication. Try a system browser on a newer OS version.',
|
||||
passkeyPrereqBrowserDetailNoPlatformAuthenticator:
|
||||
'Enable screen lock / fingerprint / face unlock / Windows Hello, then try again.',
|
||||
passkeyPrereqBrowserDetailDetectFailed: 'Detection failed. Refresh and retry, or switch to a system browser.',
|
||||
passkeyPrereqGoSetup: 'Configure',
|
||||
passkeyCount: 'Bound {0}/{1}',
|
||||
passkeyName: 'Name',
|
||||
|
||||
@@ -2016,9 +2016,17 @@ const message = {
|
||||
'Solo las solicitudes desde estas IP/CIDR confiarán en Forwarded y X-Forwarded-Proto para detectar HTTPS',
|
||||
passkeyNotSupported: 'El navegador o entorno actual no admite passkeys',
|
||||
passkeyPrereqTitle: 'Se requieren los siguientes requisitos previos para Passkey',
|
||||
passkeyPrereqBindDomain: 'Nombre de dominio configurado',
|
||||
passkeyPrereqHttps: 'HTTPS / Contexto seguro',
|
||||
passkeyPrereqBrowser: 'El navegador admite WebAuthn',
|
||||
passkeyPrereqBindDomain: 'Vinculación de dominio de 1Panel configurada',
|
||||
passkeyPrereqHttps: 'Acceso seguro mediante HTTPS',
|
||||
passkeyPrereqBrowser: 'El entorno admite Passkey (WebAuthn + autenticador de plataforma)',
|
||||
passkeyPrereqBrowserDetailWebAuthnUnavailable:
|
||||
'Usa un navegador del sistema y confirma que el panel se abre por HTTPS con un dominio vinculado.',
|
||||
passkeyPrereqBrowserDetailPlatformCapabilityUnavailable:
|
||||
'Este entorno no puede usar autenticación del dispositivo. Prueba un navegador del sistema en una versión más nueva del SO.',
|
||||
passkeyPrereqBrowserDetailNoPlatformAuthenticator:
|
||||
'Activa bloqueo de pantalla / huella / reconocimiento facial / Windows Hello y vuelve a intentarlo.',
|
||||
passkeyPrereqBrowserDetailDetectFailed:
|
||||
'La detección falló. Recarga la página y vuelve a intentarlo, o cambia a un navegador del sistema.',
|
||||
passkeyPrereqGoSetup: 'Configurar',
|
||||
passkeyCount: 'Vinculadas {0}/{1}',
|
||||
passkeyName: 'Nombre',
|
||||
|
||||
@@ -1946,9 +1946,17 @@ const message = {
|
||||
'以下の IP/CIDR からのリクエストのみが Forwarded/X-Forwarded-Proto を HTTPS 判定に使います',
|
||||
passkeyNotSupported: 'ブラウザまたは環境がパスキー非対応です。ドメインと HTTPS を確認してください',
|
||||
passkeyPrereqTitle: 'Passkey を使用するには次の前提条件が必要です',
|
||||
passkeyPrereqBindDomain: 'ドメイン名が設定済み',
|
||||
passkeyPrereqHttps: 'HTTPS / セキュアコンテキスト',
|
||||
passkeyPrereqBrowser: 'ブラウザが WebAuthn をサポート',
|
||||
passkeyPrereqBindDomain: '1Panel のドメインバインド設定済み',
|
||||
passkeyPrereqHttps: 'HTTPS で安全にアクセス済み',
|
||||
passkeyPrereqBrowser: '現在の環境が Passkey(WebAuthn + プラットフォーム認証器)に対応',
|
||||
passkeyPrereqBrowserDetailWebAuthnUnavailable:
|
||||
'システムブラウザでアクセスし、ドメイン設定済みかつ HTTPS で開いていることを確認してください',
|
||||
passkeyPrereqBrowserDetailPlatformCapabilityUnavailable:
|
||||
'この環境ではデバイス認証を利用できません。新しい OS のシステムブラウザでお試しください',
|
||||
passkeyPrereqBrowserDetailNoPlatformAuthenticator:
|
||||
'画面ロック/指紋/Face ID/Windows Hello を有効化してから再試行してください',
|
||||
passkeyPrereqBrowserDetailDetectFailed:
|
||||
'環境検出に失敗しました。ページを更新して再試行するか、システムブラウザをご利用ください',
|
||||
passkeyPrereqGoSetup: '設定する',
|
||||
passkeyCount: '登録済み {0}/{1}',
|
||||
passkeyName: '名称',
|
||||
|
||||
@@ -1920,9 +1920,17 @@ const message = {
|
||||
'이 IP/CIDR 출처의 요청만 Forwarded와 X-Forwarded-Proto 헤더를 HTTPS 판단에 사용합니다',
|
||||
passkeyNotSupported: '브라우저/환경이 패스키를 지원하지 않습니다. 도메인과 HTTPS를 확인하세요',
|
||||
passkeyPrereqTitle: 'Passkey 사용을 위해 다음 전제 조건이 필요합니다',
|
||||
passkeyPrereqBindDomain: '도메인 이름 구성됨',
|
||||
passkeyPrereqHttps: 'HTTPS / 보안 컨텍스트',
|
||||
passkeyPrereqBrowser: '브라우저가 WebAuthn을 지원합니다',
|
||||
passkeyPrereqBindDomain: '1Panel 도메인 바인딩 구성됨',
|
||||
passkeyPrereqHttps: 'HTTPS를 통해 안전하게 접속됨',
|
||||
passkeyPrereqBrowser: '현재 환경이 Passkey를 지원합니다 (WebAuthn + 플랫폼 인증기)',
|
||||
passkeyPrereqBrowserDetailWebAuthnUnavailable:
|
||||
'시스템 브라우저로 접속하고, 바인딩된 도메인으로 HTTPS에서 패널을 열었는지 확인하세요.',
|
||||
passkeyPrereqBrowserDetailPlatformCapabilityUnavailable:
|
||||
'현재 환경에서는 기기 인증을 사용할 수 없습니다. 더 최신 OS의 시스템 브라우저에서 시도하세요.',
|
||||
passkeyPrereqBrowserDetailNoPlatformAuthenticator:
|
||||
'화면 잠금/지문/얼굴 인식/Windows Hello를 활성화한 뒤 다시 시도하세요.',
|
||||
passkeyPrereqBrowserDetailDetectFailed:
|
||||
'감지에 실패했습니다. 페이지를 새로고침 후 다시 시도하거나 시스템 브라우저로 전환하세요.',
|
||||
passkeyPrereqGoSetup: '설정',
|
||||
passkeyCount: '등록됨 {0}/{1}',
|
||||
passkeyName: '이름',
|
||||
|
||||
@@ -2000,9 +2000,17 @@ const message = {
|
||||
'Hanya permintaan daripada IP/CIDR ini akan mempercayai Forwarded dan X-Forwarded-Proto untuk menentukan HTTPS',
|
||||
passkeyNotSupported: 'Pelayar atau persekitaran semasa tidak menyokong passkey',
|
||||
passkeyPrereqTitle: 'Prasyarat berikut diperlukan untuk Passkey',
|
||||
passkeyPrereqBindDomain: 'Nama domain dikonfigurasi',
|
||||
passkeyPrereqHttps: 'HTTPS / Konteks selamat',
|
||||
passkeyPrereqBrowser: 'Pelayar menyokong WebAuthn',
|
||||
passkeyPrereqBindDomain: 'Pengikatan domain 1Panel dikonfigurasi',
|
||||
passkeyPrereqHttps: 'Akses selamat melalui HTTPS',
|
||||
passkeyPrereqBrowser: 'Persekitaran menyokong Passkey (WebAuthn + pengesah platform)',
|
||||
passkeyPrereqBrowserDetailWebAuthnUnavailable:
|
||||
'Gunakan pelayar sistem dan pastikan panel dibuka melalui HTTPS dengan domain yang telah diikat.',
|
||||
passkeyPrereqBrowserDetailPlatformCapabilityUnavailable:
|
||||
'Persekitaran ini tidak boleh menggunakan pengesahan peranti. Cuba pelayar sistem pada versi OS yang lebih baharu.',
|
||||
passkeyPrereqBrowserDetailNoPlatformAuthenticator:
|
||||
'Aktifkan kunci skrin / cap jari / pengecaman wajah / Windows Hello, kemudian cuba lagi.',
|
||||
passkeyPrereqBrowserDetailDetectFailed:
|
||||
'Pengesanan gagal. Muat semula dan cuba lagi, atau tukar ke pelayar sistem.',
|
||||
passkeyPrereqGoSetup: 'Konfigurasi',
|
||||
passkeyCount: 'Dipaut {0}/{1}',
|
||||
passkeyName: 'Nama',
|
||||
|
||||
@@ -1987,9 +1987,17 @@ const message = {
|
||||
'Somente requisições originadas nesses IP/CIDR confiarão em Forwarded e X-Forwarded-Proto para detectar HTTPS',
|
||||
passkeyNotSupported: 'O navegador ou ambiente atual não suporta passkeys',
|
||||
passkeyPrereqTitle: 'Os seguintes pré-requisitos são necessários para Passkey',
|
||||
passkeyPrereqBindDomain: 'Nome de domínio configurado',
|
||||
passkeyPrereqHttps: 'HTTPS / Contexto seguro',
|
||||
passkeyPrereqBrowser: 'Navegador suporta WebAuthn',
|
||||
passkeyPrereqBindDomain: 'Vinculação de domínio do 1Panel configurada',
|
||||
passkeyPrereqHttps: 'Acesso seguro via HTTPS',
|
||||
passkeyPrereqBrowser: 'O ambiente suporta Passkey (WebAuthn + autenticador de plataforma)',
|
||||
passkeyPrereqBrowserDetailWebAuthnUnavailable:
|
||||
'Use um navegador do sistema e confirme que o painel está aberto em HTTPS com domínio vinculado.',
|
||||
passkeyPrereqBrowserDetailPlatformCapabilityUnavailable:
|
||||
'Este ambiente não pode usar autenticação do dispositivo. Tente um navegador do sistema em uma versão mais nova do SO.',
|
||||
passkeyPrereqBrowserDetailNoPlatformAuthenticator:
|
||||
'Ative bloqueio de tela / impressão digital / reconhecimento facial / Windows Hello e tente novamente.',
|
||||
passkeyPrereqBrowserDetailDetectFailed:
|
||||
'Falha na detecção. Atualize a página e tente novamente, ou troque para um navegador do sistema.',
|
||||
passkeyPrereqGoSetup: 'Configurar',
|
||||
passkeyCount: 'Vinculadas {0}/{1}',
|
||||
passkeyName: 'Nome',
|
||||
|
||||
@@ -1987,9 +1987,17 @@ const message = {
|
||||
'Только запросы с этих IP/CIDR будут доверять заголовкам Forwarded и X-Forwarded-Proto при определении HTTPS',
|
||||
passkeyNotSupported: 'Текущий браузер или среда не поддерживает passkey; проверьте домен и HTTPS',
|
||||
passkeyPrereqTitle: 'Для использования Passkey необходимо выполнить следующие условия',
|
||||
passkeyPrereqBindDomain: 'Домен настроен',
|
||||
passkeyPrereqHttps: 'HTTPS / Безопасный контекст',
|
||||
passkeyPrereqBrowser: 'Браузер поддерживает WebAuthn',
|
||||
passkeyPrereqBindDomain: 'Настроена привязка домена 1Panel',
|
||||
passkeyPrereqHttps: 'Безопасный доступ по HTTPS',
|
||||
passkeyPrereqBrowser: 'Среда поддерживает Passkey (WebAuthn + платформенный аутентификатор)',
|
||||
passkeyPrereqBrowserDetailWebAuthnUnavailable:
|
||||
'Используйте системный браузер и убедитесь, что панель открыта по HTTPS с привязанным доменом.',
|
||||
passkeyPrereqBrowserDetailPlatformCapabilityUnavailable:
|
||||
'В этой среде нельзя использовать аутентификацию устройства. Попробуйте системный браузер на более новой версии ОС.',
|
||||
passkeyPrereqBrowserDetailNoPlatformAuthenticator:
|
||||
'Включите блокировку экрана / отпечаток / Face ID / Windows Hello и повторите попытку.',
|
||||
passkeyPrereqBrowserDetailDetectFailed:
|
||||
'Не удалось выполнить проверку. Обновите страницу и попробуйте снова или перейдите в системный браузер.',
|
||||
passkeyPrereqGoSetup: 'Настроить',
|
||||
passkeyCount: 'Привязано {0}/{1}',
|
||||
passkeyName: 'Название',
|
||||
|
||||
@@ -2024,9 +2024,17 @@ const message = {
|
||||
'Sadece bu IP/CIDR kaynaklarından gelen isteklerde Forwarded ve X-Forwarded-Proto HTTPS belirlenmesinde kullanılır',
|
||||
passkeyNotSupported: 'Tarayıcı/ortam passkey desteklemiyor; alan adı ve HTTPS erişimini doğrulayın',
|
||||
passkeyPrereqTitle: 'Passkey için aşağıdaki ön koşullar gereklidir',
|
||||
passkeyPrereqBindDomain: 'Alan adı yapılandırıldı',
|
||||
passkeyPrereqHttps: 'HTTPS / Güvenli bağlam',
|
||||
passkeyPrereqBrowser: 'Tarayıcı WebAuthn destekliyor',
|
||||
passkeyPrereqBindDomain: '1Panel alan adı bağlama yapılandırıldı',
|
||||
passkeyPrereqHttps: 'HTTPS üzerinden güvenli erişim sağlandı',
|
||||
passkeyPrereqBrowser: 'Ortam Passkey destekliyor (WebAuthn + platform doğrulayıcı)',
|
||||
passkeyPrereqBrowserDetailWebAuthnUnavailable:
|
||||
'Sistem tarayıcısı kullanın ve panelin HTTPS üzerinden, bağlı bir alan adıyla açıldığını doğrulayın.',
|
||||
passkeyPrereqBrowserDetailPlatformCapabilityUnavailable:
|
||||
'Bu ortam cihaz kimlik doğrulamasını kullanamıyor. Daha yeni bir işletim sisteminde sistem tarayıcısını deneyin.',
|
||||
passkeyPrereqBrowserDetailNoPlatformAuthenticator:
|
||||
"Ekran kilidi / parmak izi / yüz tanıma / Windows Hello'yu etkinleştirip tekrar deneyin.",
|
||||
passkeyPrereqBrowserDetailDetectFailed:
|
||||
'Algılama başarısız oldu. Sayfayı yenileyip tekrar deneyin veya sistem tarayıcısına geçin.',
|
||||
passkeyPrereqGoSetup: 'Yapılandır',
|
||||
passkeyCount: 'Bağlı {0}/{1}',
|
||||
passkeyName: 'Ad',
|
||||
|
||||
@@ -1964,9 +1964,15 @@ const message = {
|
||||
'僅當請求來源命中以下 IP/CIDR 時,才會信任 Forwarded 與 X-Forwarded-Proto 判斷 HTTPS',
|
||||
passkeyNotSupported: '目前瀏覽器或環境不支援通行金鑰,請確認網域與 HTTPS',
|
||||
passkeyPrereqTitle: '使用通行金鑰需滿足以下前置條件',
|
||||
passkeyPrereqBindDomain: '已綁定網域',
|
||||
passkeyPrereqHttps: 'HTTPS 安全上下文',
|
||||
passkeyPrereqBrowser: '瀏覽器支援 WebAuthn',
|
||||
passkeyPrereqBindDomain: '已設定 1Panel 網域綁定',
|
||||
passkeyPrereqHttps: '已透過 HTTPS 安全存取',
|
||||
passkeyPrereqBrowser: '目前環境支援 Passkey(WebAuthn + 平台驗證器)',
|
||||
passkeyPrereqBrowserDetailWebAuthnUnavailable: '請使用系統瀏覽器存取,並確認已綁定網域且透過 HTTPS 開啟面板',
|
||||
passkeyPrereqBrowserDetailPlatformCapabilityUnavailable:
|
||||
'目前環境無法使用裝置認證,請改用系統瀏覽器並確認系統版本較新',
|
||||
passkeyPrereqBrowserDetailNoPlatformAuthenticator:
|
||||
'請先在系統中啟用螢幕鎖定/指紋/臉部辨識/Windows Hello 後重試',
|
||||
passkeyPrereqBrowserDetailDetectFailed: '環境檢測失敗,請重新整理後重試,或改用系統瀏覽器存取',
|
||||
passkeyPrereqGoSetup: '去設定',
|
||||
passkeyCount: '已綁定 {0}/{1}',
|
||||
passkeyName: '名稱',
|
||||
|
||||
@@ -1983,9 +1983,14 @@ const message = {
|
||||
passkeyTrustedProxiesHelper: '仅当请求来源命中以下 IP/CIDR 时,才信任 Forwarded 与 X-Forwarded-Proto 头',
|
||||
passkeyNotSupported: '当前浏览器或环境不支持通行密钥',
|
||||
passkeyPrereqTitle: '使用通行密钥需满足以下前置条件',
|
||||
passkeyPrereqBindDomain: '已绑定域名',
|
||||
passkeyPrereqHttps: 'HTTPS 安全上下文',
|
||||
passkeyPrereqBrowser: '浏览器支持 WebAuthn',
|
||||
passkeyPrereqBindDomain: '已设置 1Panel 域名绑定',
|
||||
passkeyPrereqHttps: '已通过 HTTPS 安全访问',
|
||||
passkeyPrereqBrowser: '当前环境支持 Passkey(WebAuthn + 平台认证器)',
|
||||
passkeyPrereqBrowserDetailWebAuthnUnavailable: '请使用系统浏览器访问,并确认已绑定域名且通过 HTTPS 打开面板',
|
||||
passkeyPrereqBrowserDetailPlatformCapabilityUnavailable:
|
||||
'当前环境无法使用设备认证,请改用系统浏览器并确认系统版本较新',
|
||||
passkeyPrereqBrowserDetailNoPlatformAuthenticator: '请先在系统中启用屏幕锁/指纹/面容/Windows Hello 后重试',
|
||||
passkeyPrereqBrowserDetailDetectFailed: '环境检测失败,请刷新页面重试,或改用系统浏览器访问',
|
||||
passkeyPrereqGoSetup: '去设置',
|
||||
passkeyCount: '已绑定 {0}/{1}',
|
||||
passkeyName: '名称',
|
||||
|
||||
@@ -33,6 +33,9 @@
|
||||
<Close v-else />
|
||||
</el-icon>
|
||||
<span>{{ $t('setting.passkeyPrereqBrowser') }}</span>
|
||||
<span v-if="!prereqBrowser && prereqBrowserDetail" class="text-xs text-gray-500">
|
||||
{{ prereqBrowserDetail }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -135,7 +138,14 @@ const passkeyMaxCount = 5;
|
||||
|
||||
const prereqBindDomain = computed(() => hasBindDomain.value);
|
||||
const prereqHttps = computed(() => window.isSecureContext);
|
||||
const prereqBrowser = computed(() => !!window.PublicKeyCredential);
|
||||
const prereqBrowser = ref(false);
|
||||
const prereqBrowserDetailKey = ref('');
|
||||
const prereqBrowserDetail = computed(() => {
|
||||
if (!prereqBrowserDetailKey.value) {
|
||||
return '';
|
||||
}
|
||||
return i18n.global.t(prereqBrowserDetailKey.value);
|
||||
});
|
||||
const allPrerequisitesMet = computed(() => prereqBindDomain.value && prereqHttps.value && prereqBrowser.value);
|
||||
|
||||
const passkeyCountText = computed(() => {
|
||||
@@ -148,8 +158,31 @@ const canRegisterPasskey = computed(() => {
|
||||
);
|
||||
});
|
||||
|
||||
const checkPasskeyBrowserSupport = async () => {
|
||||
prereqBrowser.value = false;
|
||||
prereqBrowserDetailKey.value = '';
|
||||
const credentialApi = window.PublicKeyCredential;
|
||||
if (!credentialApi) {
|
||||
prereqBrowserDetailKey.value = 'setting.passkeyPrereqBrowserDetailWebAuthnUnavailable';
|
||||
return;
|
||||
}
|
||||
if (typeof credentialApi.isUserVerifyingPlatformAuthenticatorAvailable !== 'function') {
|
||||
prereqBrowserDetailKey.value = 'setting.passkeyPrereqBrowserDetailPlatformCapabilityUnavailable';
|
||||
return;
|
||||
}
|
||||
try {
|
||||
prereqBrowser.value = await credentialApi.isUserVerifyingPlatformAuthenticatorAvailable();
|
||||
if (!prereqBrowser.value) {
|
||||
prereqBrowserDetailKey.value = 'setting.passkeyPrereqBrowserDetailNoPlatformAuthenticator';
|
||||
}
|
||||
} catch (error) {
|
||||
prereqBrowserDetailKey.value = 'setting.passkeyPrereqBrowserDetailDetectFailed';
|
||||
}
|
||||
};
|
||||
|
||||
const acceptParams = async (params: DrawerParams) => {
|
||||
hasBindDomain.value = params.bindDomain.trim().length > 0;
|
||||
await checkPasskeyBrowserSupport();
|
||||
drawerVisible.value = true;
|
||||
await loadPasskeyTrustedProxies();
|
||||
await loadPasskeys();
|
||||
|
||||
Reference in New Issue
Block a user