diff --git a/locales/index.d.ts b/locales/index.d.ts index f0dead1245..c21d89e8f8 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -5158,6 +5158,10 @@ export interface Locale extends ILocale { * パスキーの検証に成功しましたが、パスワードレスログインが無効になっています。 */ "passkeyVerificationSucceededButPasswordlessLoginDisabled": string; + /** + * お使いのブラウザはパスキーをサポートしていません。 + */ + "yourBrowserDoesNotSupportPasskey": string; /** * フォロワーへのメッセージ */ diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 0076c467ec..3ee6ab1cee 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1285,6 +1285,7 @@ signinWithPasskey: "パスキーでログイン" unknownWebAuthnKey: "登録されていないパスキーです。" passkeyVerificationFailed: "パスキーの検証に失敗しました。" passkeyVerificationSucceededButPasswordlessLoginDisabled: "パスキーの検証に成功しましたが、パスワードレスログインが無効になっています。" +yourBrowserDoesNotSupportPasskey: "お使いのブラウザはパスキーをサポートしていません。" messageToFollower: "フォロワーへのメッセージ" target: "対象" diff --git a/packages/backend/src/server/api/SigninApiService.ts b/packages/backend/src/server/api/SigninApiService.ts index 0d24ffa56a..d608ad527e 100644 --- a/packages/backend/src/server/api/SigninApiService.ts +++ b/packages/backend/src/server/api/SigninApiService.ts @@ -136,6 +136,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.signinWithPasskey }} - -
+ @@ -55,6 +57,7 @@ SPDX-License-Identifier: AGPL-3.0-only