Merged PR 576: dev環境不具合修正
## 概要 [Task3046: dev環境不具合修正](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/3046) - 元PBI or タスクへのリンク(内容・目的などはそちらにあるはず) - 何をどう変更したか、追加したライブラリなど - このPull Requestでの対象/対象外 - 影響範囲(他の機能にも影響があるか) ## レビューポイント - 特にレビューしてほしい箇所 - 軽微なものや自明なものは記載不要 - 修正範囲が大きい場合などに記載 - 全体的にや仕様を満たしているか等は本当に必要な時のみ記載 ## UIの変更 - Before/Afterのスクショなど - スクショ置き場 ## 動作確認状況 - ローカルで確認、develop環境で確認など ## 補足 - 相談、参考資料などがあれば
This commit is contained in:
parent
e228d06cc7
commit
35923f84e2
@ -39,6 +39,12 @@ export const UNAUTHORIZED_TO_CONTINUE_ERROR_CODES = [
|
||||
"E010501",
|
||||
];
|
||||
|
||||
/**
|
||||
* ローカルストレージに残すキー類
|
||||
* @const {string[]}
|
||||
*/
|
||||
export const KEYS_TO_PRESERVE = ["accessToken", "refreshToken", "displayInfo"];
|
||||
|
||||
/**
|
||||
* アクセストークンを更新する基準の秒数
|
||||
* @const {number}
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
import { createAsyncThunk } from "@reduxjs/toolkit";
|
||||
import type { RootState } from "app/store";
|
||||
import { setToken } from "features/auth";
|
||||
import { KEYS_TO_PRESERVE } from "components/auth/constants";
|
||||
import {
|
||||
AuthApi,
|
||||
UsersApi,
|
||||
@ -42,7 +43,18 @@ export const loginAsync = createAsyncThunk<
|
||||
refreshToken: data.refreshToken,
|
||||
})
|
||||
);
|
||||
// ローカルストレージに残すキー
|
||||
const keysToPreserve = KEYS_TO_PRESERVE;
|
||||
|
||||
// すべてのローカルストレージキーを取得
|
||||
const allKeys = Object.keys(localStorage);
|
||||
|
||||
// 特定のキーを除外して削除
|
||||
allKeys.forEach((key) => {
|
||||
if (!keysToPreserve.includes(key)) {
|
||||
localStorage.removeItem(key);
|
||||
}
|
||||
});
|
||||
return data;
|
||||
} catch (e) {
|
||||
// e ⇒ errorObjectに変換"
|
||||
|
||||
@ -1 +1,3 @@
|
||||
export const ADB2C_PREFIX = 'adb2c-external-id:';
|
||||
|
||||
export const IDTOKEN_PREFIX = 'id-token:';
|
||||
|
||||
11
dictation_server/src/common/cache/index.ts
vendored
11
dictation_server/src/common/cache/index.ts
vendored
@ -1,4 +1,4 @@
|
||||
import { ADB2C_PREFIX } from './constants';
|
||||
import { ADB2C_PREFIX, IDTOKEN_PREFIX } from './constants';
|
||||
|
||||
/**
|
||||
* ADB2Cのユーザー格納用のキーを生成する
|
||||
@ -17,3 +17,12 @@ export const makeADB2CKey = (externalId: string): string => {
|
||||
export const restoreAdB2cID = (key: string): string => {
|
||||
return key.replace(ADB2C_PREFIX, '');
|
||||
};
|
||||
|
||||
/**
|
||||
* ADB2CのIDトークン格納用のキーを生成する
|
||||
* @param idToken IDトークン
|
||||
* @returns キャッシュのキー
|
||||
*/
|
||||
export const makeIDTokenKey = (idToken: string): string => {
|
||||
return `${IDTOKEN_PREFIX}${idToken}`;
|
||||
};
|
||||
|
||||
@ -38,6 +38,8 @@ import { TermsService } from '../../features/terms/terms.service';
|
||||
import { TermsRepositoryModule } from '../../repositories/terms/terms.repository.module';
|
||||
import { TermsModule } from '../../features/terms/terms.module';
|
||||
import { CacheModule } from '@nestjs/common';
|
||||
import { RedisModule } from '../../gateways/redis/redis.module';
|
||||
import { RedisService } from '../../gateways/redis/redis.service';
|
||||
|
||||
export const makeTestingModule = async (
|
||||
datasource: DataSource,
|
||||
@ -77,6 +79,7 @@ export const makeTestingModule = async (
|
||||
SortCriteriaRepositoryModule,
|
||||
WorktypesRepositoryModule,
|
||||
TermsRepositoryModule,
|
||||
RedisModule,
|
||||
CacheModule.register({ isGlobal: true }),
|
||||
],
|
||||
providers: [
|
||||
@ -90,6 +93,7 @@ export const makeTestingModule = async (
|
||||
TemplatesService,
|
||||
WorkflowsService,
|
||||
TermsService,
|
||||
RedisService,
|
||||
],
|
||||
})
|
||||
.useMocker(async (token) => {
|
||||
|
||||
@ -33,6 +33,8 @@ import { RoleGuard } from '../../common/guards/role/roleguards';
|
||||
import { ADMIN_ROLES, TIERS } from '../../constants';
|
||||
import jwt from 'jsonwebtoken';
|
||||
import { AccessToken, RefreshToken } from '../../common/token';
|
||||
import { makeIDTokenKey } from '../../common/cache';
|
||||
import { RedisService } from '../../gateways/redis/redis.service';
|
||||
|
||||
@ApiTags('auth')
|
||||
@Controller('auth')
|
||||
@ -41,6 +43,7 @@ export class AuthController {
|
||||
// TODO「タスク 1828: IDトークンを一度しか使えないようにする」で使用する予定
|
||||
// private readonly redisService: RedisService,
|
||||
private readonly authService: AuthService,
|
||||
private readonly redisService: RedisService,
|
||||
) {}
|
||||
|
||||
@Post('token')
|
||||
@ -77,6 +80,18 @@ export class AuthController {
|
||||
|
||||
const context = makeContext(uuidv4());
|
||||
|
||||
const key = makeIDTokenKey(body.idToken);
|
||||
const isTokenExists = await this.redisService.get<boolean>(key);
|
||||
if (!isTokenExists) {
|
||||
// IDトークンがキャッシュに存在しない場合(idTokenの有効期限をADB2Cの有効期限と合わせる(300秒))
|
||||
await this.redisService.set(key, true, 300);
|
||||
} else {
|
||||
// IDトークンがキャッシュに存在する場合エラー
|
||||
throw new HttpException(
|
||||
makeErrorResponse('E000106'),
|
||||
HttpStatus.UNAUTHORIZED,
|
||||
);
|
||||
}
|
||||
// 同意済み利用規約バージョンが最新かチェック
|
||||
const isAcceptedLatestVersion =
|
||||
await this.authService.isAcceptedLatestVersion(context, idToken);
|
||||
|
||||
@ -4,15 +4,10 @@ import { AdB2cModule } from '../../gateways/adb2c/adb2c.module';
|
||||
import { UsersRepositoryModule } from '../../repositories/users/users.repository.module';
|
||||
import { AuthController } from './auth.controller';
|
||||
import { AuthService } from './auth.service';
|
||||
import { TermsRepositoryModule } from '../../repositories/terms/terms.repository.module';
|
||||
import { RedisService } from '../../gateways/redis/redis.service';
|
||||
@Module({
|
||||
imports: [
|
||||
ConfigModule,
|
||||
AdB2cModule,
|
||||
UsersRepositoryModule,
|
||||
TermsRepositoryModule,
|
||||
],
|
||||
imports: [ConfigModule, AdB2cModule, UsersRepositoryModule],
|
||||
controllers: [AuthController],
|
||||
providers: [AuthService],
|
||||
providers: [AuthService, RedisService],
|
||||
})
|
||||
export class AuthModule {}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user