diff options
| author | tamaina <tamaina@hotmail.co.jp> | 2022-03-27 22:42:05 +0900 |
|---|---|---|
| committer | tamaina <tamaina@hotmail.co.jp> | 2022-03-27 22:42:05 +0900 |
| commit | 7314643b8d80445bcc24c0056f9236763efec4de (patch) | |
| tree | 2c2b67bb7bc406c0d2633eaddfa438c1f528138c /packages/backend/src/server/api/authenticate.ts | |
| parent | Merge branch 'develop' into pizzax-indexeddb (diff) | |
| parent | Update CONTRIBUTING.md (diff) | |
| download | misskey-7314643b8d80445bcc24c0056f9236763efec4de.tar.gz misskey-7314643b8d80445bcc24c0056f9236763efec4de.tar.bz2 misskey-7314643b8d80445bcc24c0056f9236763efec4de.zip | |
Merge branch 'develop' into pizzax-indexeddb
Diffstat (limited to 'packages/backend/src/server/api/authenticate.ts')
| -rw-r--r-- | packages/backend/src/server/api/authenticate.ts | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/packages/backend/src/server/api/authenticate.ts b/packages/backend/src/server/api/authenticate.ts index 7fdf14666e..65ccfcf551 100644 --- a/packages/backend/src/server/api/authenticate.ts +++ b/packages/backend/src/server/api/authenticate.ts @@ -1,7 +1,12 @@ import isNativeToken from './common/is-native-token.js'; -import { User } from '@/models/entities/user.js'; +import { CacheableLocalUser, ILocalUser } from '@/models/entities/user.js'; import { Users, AccessTokens, Apps } from '@/models/index.js'; import { AccessToken } from '@/models/entities/access-token.js'; +import { Cache } from '@/misc/cache.js'; +import { App } from '@/models/entities/app.js'; +import { localUserByIdCache, localUserByNativeTokenCache } from '@/services/user-cache.js'; + +const appCache = new Cache<App>(Infinity); export class AuthenticationError extends Error { constructor(message: string) { @@ -10,15 +15,14 @@ export class AuthenticationError extends Error { } } -export default async (token: string | null): Promise<[User | null | undefined, AccessToken | null | undefined]> => { +export default async (token: string | null): Promise<[CacheableLocalUser | null | undefined, AccessToken | null | undefined]> => { if (token == null) { return [null, null]; } if (isNativeToken(token)) { - // Fetch user - const user = await Users - .findOne({ token }); + const user = await localUserByNativeTokenCache.fetch(token, + () => Users.findOneBy({ token }) as Promise<ILocalUser | null>); if (user == null) { throw new AuthenticationError('user not found'); @@ -42,14 +46,14 @@ export default async (token: string | null): Promise<[User | null | undefined, A lastUsedAt: new Date(), }); - const user = await Users - .findOne({ - id: accessToken.userId, // findOne(accessToken.userId) のように書かないのは後方互換性のため - }); + const user = await localUserByIdCache.fetch(accessToken.userId, + () => Users.findOneBy({ + id: accessToken.userId, + }) as Promise<ILocalUser>); if (accessToken.appId) { - const app = await Apps - .findOneOrFail(accessToken.appId); + const app = await appCache.fetch(accessToken.appId, + () => Apps.findOneByOrFail({ id: accessToken.appId! })); return [user, { id: accessToken.id, |