enhance: アカウント登録時のメールアドレス認証に30分の有効期限を設定 (#12221)
* 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
This commit is contained in:
parent
1729307fcf
commit
025ae436b5
5 changed files with 26 additions and 3 deletions
|
@ -24,6 +24,9 @@
|
||||||
- Enhance: 未読の通知数を表示できるように
|
- Enhance: 未読の通知数を表示できるように
|
||||||
- Enhance: ローカリゼーションの更新
|
- Enhance: ローカリゼーションの更新
|
||||||
- Enhance: 依存関係の更新
|
- Enhance: 依存関係の更新
|
||||||
|
- Enhance: アカウント登録時のメールアドレス認証に30分の有効期限を設定
|
||||||
|
- 有効期限が切れた後であれば、登録時に使用した招待コードを再度利用できるように変更しました。
|
||||||
|
- ユーザーが誤ったメールアドレスを入力した場合に招待コードが失効してしまう問題が解消されます。
|
||||||
- Change: CWを使用する場合、注釈を空にすることは許可されなくなりました
|
- Change: CWを使用する場合、注釈を空にすることは許可されなくなりました
|
||||||
|
|
||||||
### Client
|
### Client
|
||||||
|
|
1
locales/index.d.ts
vendored
1
locales/index.d.ts
vendored
|
@ -1158,6 +1158,7 @@ export interface Locale {
|
||||||
"pullDownToRefresh": string;
|
"pullDownToRefresh": string;
|
||||||
"disableStreamingTimeline": string;
|
"disableStreamingTimeline": string;
|
||||||
"useGroupedNotifications": string;
|
"useGroupedNotifications": string;
|
||||||
|
"signupPendingError": string;
|
||||||
"cwNotationRequired": string;
|
"cwNotationRequired": string;
|
||||||
"_announcement": {
|
"_announcement": {
|
||||||
"forExistingUsers": string;
|
"forExistingUsers": string;
|
||||||
|
|
|
@ -1155,6 +1155,7 @@ refreshing: "リロード中"
|
||||||
pullDownToRefresh: "引っ張ってリロード"
|
pullDownToRefresh: "引っ張ってリロード"
|
||||||
disableStreamingTimeline: "タイムラインのリアルタイム更新を無効にする"
|
disableStreamingTimeline: "タイムラインのリアルタイム更新を無効にする"
|
||||||
useGroupedNotifications: "通知をグルーピングして表示する"
|
useGroupedNotifications: "通知をグルーピングして表示する"
|
||||||
|
signupPendingError: "メールアドレスの確認中に問題が発生しました。リンクの有効期限が切れている可能性があります。"
|
||||||
cwNotationRequired: "「内容を隠す」がオンの場合は注釈の記述が必要です。"
|
cwNotationRequired: "「内容を隠す」がオンの場合は注釈の記述が必要です。"
|
||||||
|
|
||||||
_announcement:
|
_announcement:
|
||||||
|
@ -1554,7 +1555,7 @@ _ffVisibility:
|
||||||
_signup:
|
_signup:
|
||||||
almostThere: "ほとんど完了です"
|
almostThere: "ほとんど完了です"
|
||||||
emailAddressInfo: "あなたが使っているメールアドレスを入力してください。メールアドレスが公開されることはありません。"
|
emailAddressInfo: "あなたが使っているメールアドレスを入力してください。メールアドレスが公開されることはありません。"
|
||||||
emailSent: "入力されたメールアドレス({email})宛に確認のメールが送信されました。メールに記載されたリンクにアクセスすると、アカウントの作成が完了します。"
|
emailSent: "入力されたメールアドレス({email})宛に確認のメールが送信されました。メールに記載されたリンクにアクセスすると、アカウントの作成が完了します。メールに記載されているリンクの有効期限は30分です。"
|
||||||
|
|
||||||
_accountDelete:
|
_accountDelete:
|
||||||
accountDelete: "アカウントの削除"
|
accountDelete: "アカウントの削除"
|
||||||
|
|
|
@ -136,7 +136,20 @@ export class SignupApiService {
|
||||||
return;
|
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);
|
reply.code(400);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -224,6 +237,10 @@ export class SignupApiService {
|
||||||
try {
|
try {
|
||||||
const pendingUser = await this.userPendingsRepository.findOneByOrFail({ code });
|
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({
|
const { account, secret } = await this.signupService.signup({
|
||||||
username: pendingUser.username,
|
username: pendingUser.username,
|
||||||
passwordHash: pendingUser.password,
|
passwordHash: pendingUser.password,
|
||||||
|
|
|
@ -51,7 +51,8 @@ function submit() {
|
||||||
|
|
||||||
os.alert({
|
os.alert({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
text: i18n.ts.somethingHappened,
|
title: i18n.ts.somethingHappened,
|
||||||
|
text: i18n.ts.signupPendingError,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue