开源前加固认证与部署契约:加密随机 JWT、改密事务吊销、登录 CSRF,并禁止生产回落 localhost。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -21,10 +21,19 @@ export type { FooterLink, FooterLinksAlign };
|
||||
// API 基础配置
|
||||
// 注意:客户端请求使用相对路径 /api/*,走 Next.js rewrite 代理到后端,
|
||||
// 这样浏览器视为同源,Cookie 自动携带,无需处理 CORS。
|
||||
// SSR/middleware 直连后端:优先服务端专用 BACKEND_URL(边缘部署必须显式配置,
|
||||
// localhost 兜底只在本地开发有效),回退到 NEXT_PUBLIC_API_URL。
|
||||
const API_BASE =
|
||||
process.env.BACKEND_URL || process.env.NEXT_PUBLIC_API_URL || "http://localhost:3001";
|
||||
// SSR/middleware 直连后端:优先 BACKEND_URL;生产禁止静默回落 localhost。
|
||||
const API_BASE = (() => {
|
||||
const fromEnv =
|
||||
process.env.BACKEND_URL || process.env.NEXT_PUBLIC_API_URL || "";
|
||||
if (fromEnv) return fromEnv;
|
||||
if (process.env.NODE_ENV === "production") {
|
||||
if (typeof window === "undefined") {
|
||||
throw new Error("生产环境必须设置 BACKEND_URL(SSR 直连后端)");
|
||||
}
|
||||
return "";
|
||||
}
|
||||
return "http://localhost:3001";
|
||||
})();
|
||||
|
||||
// SSR 请求超时:后端不可用时快速降级为游客视图,不阻塞页面渲染
|
||||
const SSR_TIMEOUT_MS = 8000;
|
||||
|
||||
@@ -1,7 +1,14 @@
|
||||
// 认证 cookie 名(前后端必须严格一致):
|
||||
// 生产构建(HTTPS)启用 __Host- 前缀,浏览器强制 Secure + Path=/ + 无 Domain;
|
||||
// 后端按 !DevMode 同步启用(见 backend/service/auth.go ConfigureCookieNames)。
|
||||
const HOST_PREFIX = process.env.NODE_ENV === "production" ? "__Host-" : "";
|
||||
// 与后端 ConfigureCookieNames(!DevMode) 对齐——显式 DEV_MODE=true|1 禁用 __Host-;
|
||||
// 显式 DEV_MODE=false|0 启用;未设置时回退 NODE_ENV=production(官方镜像两者同时满足)。
|
||||
function hostCookiePrefix(): string {
|
||||
const dm = (process.env.DEV_MODE || "").trim().toLowerCase();
|
||||
if (dm === "true" || dm === "1") return "";
|
||||
if (dm === "false" || dm === "0") return "__Host-";
|
||||
return process.env.NODE_ENV === "production" ? "__Host-" : "";
|
||||
}
|
||||
|
||||
const HOST_PREFIX = hostCookiePrefix();
|
||||
|
||||
export const TOKEN_COOKIE = `${HOST_PREFIX}j13_token`;
|
||||
export const REFRESH_COOKIE = `${HOST_PREFIX}j13_refresh`;
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
// 友情链接(站点级静态配置)。
|
||||
// TODO: 替换为真实友链名称与地址;后续如需后台可配,可升级为接口/设置项。
|
||||
// 友情链接(站点级静态配置)。无条目时侧栏不渲染该区块。
|
||||
export interface FriendLink {
|
||||
name: string;
|
||||
href: string;
|
||||
}
|
||||
|
||||
export const FRIEND_LINKS: FriendLink[] = [
|
||||
{ name: "大佬论坛", href: "#" },
|
||||
{ name: "Leo论坛", href: "#" },
|
||||
];
|
||||
export const FRIEND_LINKS: FriendLink[] = [];
|
||||
|
||||
Reference in New Issue
Block a user