diff --git a/locales/index.d.ts b/locales/index.d.ts index 440f24ac84..02c741fce4 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -5174,6 +5174,10 @@ export interface Locale extends ILocale { * パスキーの検証に成功しましたが、パスワードレスログインが無効になっています。 */ "passkeyVerificationSucceededButPasswordlessLoginDisabled": string; + /** + * お使いのブラウザはパスキーをサポートしていません。 + */ + "yourBrowserDoesNotSupportPasskey": string; /** * フォロワーへのメッセージ */ diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 5d8e1a5e72..2ea1826073 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1289,6 +1289,7 @@ signinWithPasskey: "パスキーでログイン" unknownWebAuthnKey: "登録されていないパスキーです。" passkeyVerificationFailed: "パスキーの検証に失敗しました。" passkeyVerificationSucceededButPasswordlessLoginDisabled: "パスキーの検証に成功しましたが、パスワードレスログインが無効になっています。" +yourBrowserDoesNotSupportPasskey: "お使いのブラウザはパスキーをサポートしていません。" messageToFollower: "フォロワーへのメッセージ" target: "対象" testCaptchaWarning: "CAPTCHAのテストを目的とした機能です。本番環境で使用しないでください。" diff --git a/packages/backend/src/server/api/SigninApiService.ts b/packages/backend/src/server/api/SigninApiService.ts index 1d983ca4bc..dee8225cae 100644 --- a/packages/backend/src/server/api/SigninApiService.ts +++ b/packages/backend/src/server/api/SigninApiService.ts @@ -137,6 +137,17 @@ export class SigninApiService { if (password == null) { reply.code(200); if (profile.twoFactorEnabled) { + if (profile.usePasswordLessLogin && securityKeysAvailable) { + const authRequest = await this.webAuthnService.initiateAuthentication(user.id); + + return { + finished: false, + next: 'passkey', + force: true, + authRequest, + } satisfies Misskey.entities.SigninFlowResponse; + } + return { finished: false, next: 'password', diff --git a/packages/frontend/src/components/MkSignin.input.vue b/packages/frontend/src/components/MkSignin.input.vue index 34c22abc31..da54a0967f 100644 --- a/packages/frontend/src/components/MkSignin.input.vue +++ b/packages/frontend/src/components/MkSignin.input.vue @@ -40,14 +40,16 @@ SPDX-License-Identifier: AGPL-3.0-only -
{{ i18n.ts.or }}
-{{ i18n.ts.or }}
+