Files
CloudFlare-ImgBed/functions/api/auth/resetAuth.js
T
MarSeventh cb8f0fd1f7 refactor: move auth endpoints to /api/auth/ subdirectory
- login.js -> auth/login.js (/api/auth/login)
- logout.js -> auth/logout.js (/api/auth/logout)
- sessionCheck.js -> auth/sessionCheck.js (/api/auth/sessionCheck)
- resetAuth.js -> auth/resetAuth.js (/api/auth/resetAuth)
- Update import paths in moved files
2026-04-17 23:46:24 +08:00

71 lines
2.5 KiB
JavaScript

import { getDatabase } from "../../utils/databaseAdapter.js";
import { destroySessionsByAuthType } from "../../utils/sessionManager.js";
/**
* 认证重置接口
*
* 使用方式:
* 1. 设置环境变量 RESET_KEY(任意字符串,建议足够复杂)
* 2. 浏览器访问 /api/resetAuth?key=你设置的RESET_KEY
* 3. 成功后所有认证配置被清除,可以直接进入管理端重新设置
* 4. 用完后建议删除或更换 RESET_KEY 环境变量
*/
export async function onRequestGet(context) {
const { request, env } = context;
// 检查是否配置了重置密钥
const resetKey = env.RESET_KEY;
if (!resetKey || resetKey.trim() === '') {
return new Response(JSON.stringify({
error: 'RESET_KEY not configured. Set the RESET_KEY environment variable first.'
}), {
status: 403,
headers: { 'Content-Type': 'application/json' },
});
}
// 从 URL 参数中获取密钥
const url = new URL(request.url);
const key = url.searchParams.get('key');
if (!key || key !== resetKey) {
return new Response(JSON.stringify({ error: 'Invalid reset key' }), {
status: 403,
headers: { 'Content-Type': 'application/json' },
});
}
try {
const db = getDatabase(env);
// 读取现有安全配置
const settingsStr = await db.get('manage@sysConfig@security');
if (settingsStr) {
const settings = JSON.parse(settingsStr);
// 只清除认证信息,保留其他安全设置(审核、域名白名单等)
delete settings.auth;
await db.put('manage@sysConfig@security', JSON.stringify(settings));
}
// 清除所有会话
const adminDestroyed = await destroySessionsByAuthType(env, 'admin');
const userDestroyed = await destroySessionsByAuthType(env, 'user');
return new Response(JSON.stringify({
success: true,
message: 'Auth credentials reset. Other security settings preserved. All sessions cleared.',
sessionsCleared: { admin: adminDestroyed, user: userDestroyed }
}), {
status: 200,
headers: { 'Content-Type': 'application/json' },
});
} catch (err) {
return new Response(JSON.stringify({
error: 'Reset failed: ' + err.message
}), {
status: 500,
headers: { 'Content-Type': 'application/json' },
});
}
}