summaryrefslogtreecommitdiff
path: root/src/server/api/authenticate.ts
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2021-03-18 10:49:14 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2021-03-18 10:52:54 +0900
commit8aa089178a54559cbc4e4fe84a618fc7535f178c (patch)
tree5f8cb6d5c51a37f4b667f7cd76d836f500cee1b4 /src/server/api/authenticate.ts
parentImprove API performance (diff)
downloadsharkey-8aa089178a54559cbc4e4fe84a618fc7535f178c.tar.gz
sharkey-8aa089178a54559cbc4e4fe84a618fc7535f178c.tar.bz2
sharkey-8aa089178a54559cbc4e4fe84a618fc7535f178c.zip
Improve server performance
Diffstat (limited to 'src/server/api/authenticate.ts')
-rw-r--r--src/server/api/authenticate.ts12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/server/api/authenticate.ts b/src/server/api/authenticate.ts
index 7404c477fd..9c9ef74352 100644
--- a/src/server/api/authenticate.ts
+++ b/src/server/api/authenticate.ts
@@ -2,8 +2,11 @@ import isNativeToken from './common/is-native-token';
import { User } from '../../models/entities/user';
import { Users, AccessTokens, Apps } from '../../models';
import { AccessToken } from '../../models/entities/access-token';
+import { Cache } from '../../misc/cache';
-const cache = {} as Record<string, User>;
+// TODO: TypeORMのカスタムキャッシュプロバイダを使っても良いかも
+// ref. https://github.com/typeorm/typeorm/blob/master/docs/caching.md
+const cache = new Cache<User>(1000 * 60 * 60);
export default async (token: string): Promise<[User | null | undefined, AccessToken | null | undefined]> => {
if (token == null) {
@@ -11,8 +14,9 @@ export default async (token: string): Promise<[User | null | undefined, AccessTo
}
if (isNativeToken(token)) {
- if (cache[token]) { // TODO: キャッシュされてから一定時間経過していたら破棄する
- return [cache[token], null];
+ const cached = cache.get(token);
+ if (cached) {
+ return [cached, null];
}
// Fetch user
@@ -23,7 +27,7 @@ export default async (token: string): Promise<[User | null | undefined, AccessTo
throw new Error('user not found');
}
- cache[token] = user;
+ cache.set(token, user);
return [user, null];
} else {