From cede212815f686338dcba5b9de7ce39a9b120acd Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Fri, 11 Oct 2024 11:22:41 +0900 Subject: [PATCH 1/3] =?UTF-8?q?fix(backend):=20=E3=83=91=E3=82=B9=E3=83=AF?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=83=AC=E3=82=B9=E3=83=AD=E3=82=B0=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E3=81=8C=E6=9C=89=E5=8A=B9=E3=81=AB=E3=81=AA=E3=81=A3?= =?UTF-8?q?=E3=81=A6=E3=81=84=E3=82=8B=E5=A0=B4=E5=90=88=E3=81=A7=E3=82=82?= =?UTF-8?q?=E8=AA=A4=E3=81=A3=E3=81=A6=E3=83=91=E3=82=B9=E3=83=AF=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=82=92=E8=A6=81=E6=B1=82=E3=81=97=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=81=9F=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- locales/index.d.ts | 4 +++ locales/ja-JP.yml | 1 + .../src/server/api/SigninApiService.ts | 11 ++++++ .../src/components/MkSignin.input.vue | 19 +++++----- packages/frontend/src/components/MkSignin.vue | 36 +++++++++++++++++-- packages/misskey-js/etc/misskey-js.api.md | 1 + packages/misskey-js/src/entities.ts | 1 + 7 files changed, 63 insertions(+), 10 deletions(-) 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