From 025ae436b5fcb0a019962807f0f79068f135038f Mon Sep 17 00:00:00 2001 From: yukineko <27853966+hideki0403@users.noreply.github.com> Date: Fri, 3 Nov 2023 14:54:28 +0900 Subject: [PATCH] =?UTF-8?q?enhance:=20=E3=82=A2=E3=82=AB=E3=82=A6=E3=83=B3?= =?UTF-8?q?=E3=83=88=E7=99=BB=E9=8C=B2=E6=99=82=E3=81=AE=E3=83=A1=E3=83=BC?= =?UTF-8?q?=E3=83=AB=E3=82=A2=E3=83=89=E3=83=AC=E3=82=B9=E8=AA=8D=E8=A8=BC?= =?UTF-8?q?=E3=81=AB30=E5=88=86=E3=81=AE=E6=9C=89=E5=8A=B9=E6=9C=9F?= =?UTF-8?q?=E9=99=90=E3=82=92=E8=A8=AD=E5=AE=9A=20(#12221)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add: metaにemailVerificationExpiresInを追加 * enhance: 招待コード使用時, メアド認証時に認証期限を確認するように * add: クライアント側に実装 * update: CHANGELOG.md * add: コメントを追加 * Revert "add: metaにemailVerificationExpiresInを追加" This reverts commit ceb6ccff51a406bfd87b4da6c59401ce5551dd95. * Revert "add: コメントを追加" This reverts commit 7ee301c3eed4ded295490a6614650a3720317772. * change(client): メール認証の有効期限を30分で固定するように変更 * change(backend): メール認証の有効期限を30分で固定するように変更 * update: CHANGELOG.md --- CHANGELOG.md | 3 +++ locales/index.d.ts | 1 + locales/ja-JP.yml | 3 ++- .../src/server/api/SignupApiService.ts | 19 ++++++++++++++++++- .../frontend/src/pages/signup-complete.vue | 3 ++- 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bbf99bee9..6837cf6e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,9 @@ - Enhance: 未読の通知数を表示できるように - Enhance: ローカリゼーションの更新 - Enhance: 依存関係の更新 +- Enhance: アカウント登録時のメールアドレス認証に30分の有効期限を設定 + - 有効期限が切れた後であれば、登録時に使用した招待コードを再度利用できるように変更しました。 + - ユーザーが誤ったメールアドレスを入力した場合に招待コードが失効してしまう問題が解消されます。 - Change: CWを使用する場合、注釈を空にすることは許可されなくなりました ### Client diff --git a/locales/index.d.ts b/locales/index.d.ts index b8dc3a68b..f6db40e94 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -1158,6 +1158,7 @@ export interface Locale { "pullDownToRefresh": string; "disableStreamingTimeline": string; "useGroupedNotifications": string; + "signupPendingError": string; "cwNotationRequired": string; "_announcement": { "forExistingUsers": string; diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 76b5386b3..1b79c399e 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1155,6 +1155,7 @@ refreshing: "リロード中" pullDownToRefresh: "引っ張ってリロード" disableStreamingTimeline: "タイムラインのリアルタイム更新を無効にする" useGroupedNotifications: "通知をグルーピングして表示する" +signupPendingError: "メールアドレスの確認中に問題が発生しました。リンクの有効期限が切れている可能性があります。" cwNotationRequired: "「内容を隠す」がオンの場合は注釈の記述が必要です。" _announcement: @@ -1554,7 +1555,7 @@ _ffVisibility: _signup: almostThere: "ほとんど完了です" emailAddressInfo: "あなたが使っているメールアドレスを入力してください。メールアドレスが公開されることはありません。" - emailSent: "入力されたメールアドレス({email})宛に確認のメールが送信されました。メールに記載されたリンクにアクセスすると、アカウントの作成が完了します。" + emailSent: "入力されたメールアドレス({email})宛に確認のメールが送信されました。メールに記載されたリンクにアクセスすると、アカウントの作成が完了します。メールに記載されているリンクの有効期限は30分です。" _accountDelete: accountDelete: "アカウントの削除" diff --git a/packages/backend/src/server/api/SignupApiService.ts b/packages/backend/src/server/api/SignupApiService.ts index d2c444011..d6f4df7f1 100644 --- a/packages/backend/src/server/api/SignupApiService.ts +++ b/packages/backend/src/server/api/SignupApiService.ts @@ -136,7 +136,20 @@ export class SignupApiService { return; } - if (ticket.usedAt) { + // メアド認証が有効の場合 + if (instance.emailRequiredForSignup) { + // メアド認証済みならエラー + if (ticket.usedBy) { + reply.code(400); + return; + } + + // 認証しておらず、メール送信から30分以内ならエラー + if (ticket.usedAt && ticket.usedAt.getTime() + (1000 * 60 * 30) > Date.now()) { + reply.code(400); + return; + } + } else if (ticket.usedAt) { reply.code(400); return; } @@ -224,6 +237,10 @@ export class SignupApiService { try { const pendingUser = await this.userPendingsRepository.findOneByOrFail({ code }); + if (this.idService.parse(pendingUser.id).date.getTime() + (1000 * 60 * 30) < Date.now()) { + throw new FastifyReplyError(400, 'EXPIRED'); + } + const { account, secret } = await this.signupService.signup({ username: pendingUser.username, passwordHash: pendingUser.password, diff --git a/packages/frontend/src/pages/signup-complete.vue b/packages/frontend/src/pages/signup-complete.vue index e9c89fa3b..d9a730851 100644 --- a/packages/frontend/src/pages/signup-complete.vue +++ b/packages/frontend/src/pages/signup-complete.vue @@ -51,7 +51,8 @@ function submit() { os.alert({ type: 'error', - text: i18n.ts.somethingHappened, + title: i18n.ts.somethingHappened, + text: i18n.ts.signupPendingError, }); }); }