middleware懒加载storage
This commit is contained in:
@@ -1,6 +1,15 @@
|
||||
/* eslint-disable no-console */
|
||||
|
||||
import { getStorage } from './db';
|
||||
// Lazy import to avoid Edge Runtime issues in middleware
|
||||
let getStorage: (() => any) | null = null;
|
||||
|
||||
async function loadStorage() {
|
||||
if (!getStorage) {
|
||||
const db = await import('./db');
|
||||
getStorage = db.getStorage;
|
||||
}
|
||||
return getStorage();
|
||||
}
|
||||
|
||||
// Token 配置
|
||||
export const TOKEN_CONFIG = {
|
||||
@@ -38,7 +47,7 @@ export async function storeRefreshToken(
|
||||
tokenData: TokenData
|
||||
): Promise<void> {
|
||||
const hashKey = `user_tokens:${username}`;
|
||||
const storage = getStorage();
|
||||
const storage = await loadStorage();
|
||||
|
||||
if (!storage || typeof (storage as any).adapter?.hSet !== 'function') {
|
||||
console.warn('Redis Hash not supported, skipping token storage');
|
||||
@@ -65,7 +74,7 @@ export async function verifyRefreshToken(
|
||||
refreshToken: string
|
||||
): Promise<boolean> {
|
||||
const hashKey = `user_tokens:${username}`;
|
||||
const storage = getStorage();
|
||||
const storage = await loadStorage();
|
||||
|
||||
if (!storage || typeof (storage as any).adapter?.hGet !== 'function') {
|
||||
console.warn('Redis Hash not supported');
|
||||
@@ -114,7 +123,7 @@ export async function revokeRefreshToken(
|
||||
tokenId: string
|
||||
): Promise<void> {
|
||||
const hashKey = `user_tokens:${username}`;
|
||||
const storage = getStorage();
|
||||
const storage = await loadStorage();
|
||||
|
||||
if (!storage || typeof (storage as any).adapter?.hDel !== 'function') {
|
||||
console.warn('Redis Hash not supported');
|
||||
@@ -138,7 +147,7 @@ export async function getUserDevices(username: string): Promise<Array<{
|
||||
expiresAt: number;
|
||||
}>> {
|
||||
const hashKey = `user_tokens:${username}`;
|
||||
const storage = getStorage();
|
||||
const storage = await loadStorage();
|
||||
|
||||
if (!storage || typeof (storage as any).adapter?.hGetAll !== 'function') {
|
||||
console.warn('Redis Hash not supported');
|
||||
@@ -188,7 +197,7 @@ export async function getUserDevices(username: string): Promise<Array<{
|
||||
// 撤销所有 Token
|
||||
export async function revokeAllRefreshTokens(username: string): Promise<void> {
|
||||
const hashKey = `user_tokens:${username}`;
|
||||
const storage = getStorage();
|
||||
const storage = await loadStorage();
|
||||
|
||||
if (!storage || typeof (storage as any).adapter?.del !== 'function') {
|
||||
console.warn('Redis Hash not supported');
|
||||
@@ -206,7 +215,7 @@ export async function revokeAllRefreshTokens(username: string): Promise<void> {
|
||||
// 清理过期的 Token(定期任务)
|
||||
export async function cleanupExpiredTokens(username: string): Promise<number> {
|
||||
const hashKey = `user_tokens:${username}`;
|
||||
const storage = getStorage();
|
||||
const storage = await loadStorage();
|
||||
|
||||
if (!storage || typeof (storage as any).adapter?.hGetAll !== 'function') {
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user