mC0wB0ys/irtracker-site

GitHub: mC0wB0ys/irtracker-site

IR Tracker 事件的官方网站,基于 vinext 脚手架构建,支持 Cloudflare D1 数据库和 ChatGPT 可选登录认证。

Stars: 0 | Forks: 0

# vinext-starter 一个运行在 [vinext](https://github.com/cloudflare/vinext) 上的简洁全栈脚手架,并支持可选的 Cloudflare D1 和 Drizzle 支持。 ## 前置条件 - Node.js `>=22.13.0` ## 快速开始 ``` npm install npm run dev npm run build ``` 此脚手架不使用 `wrangler.jsonc`。 ## 包含的结构 - 在 `app/` 下编辑站点代码 - `.openai/hosting.json` 声明了可选的 Sites D1 和 R2 绑定 - `vite.config.ts` 模拟已声明的绑定以供本地开发使用 - `db/schema.ts` 初始为空,这是有意为之的 - `examples/d1/` 包含一个可选的 D1 示例界面 - `drizzle.config.ts` 支持在需要时生成本地迁移 ## 工作区身份认证标头 OpenAI 工作区站点可以从 `oai-authenticated-user-email` 中读取当前用户的电子邮件。 经过 SIWC 认证的工作区站点,当用户的 SIWC 个人资料包含非空的 `name` 声明时,也可能接收到 `oai-authenticated-user-full-name`。全名值为百分号编码的 UTF-8,并附带 `oai-authenticated-user-full-name-encoding: percent-encoded-utf-8`。 请将全名视为可选内容,并在其不存在时回退到电子邮件: ``` import { headers } from "next/headers"; export default async function Home() { const requestHeaders = await headers(); const email = requestHeaders.get("oai-authenticated-user-email"); const encodedFullName = requestHeaders.get("oai-authenticated-user-full-name"); const fullName = encodedFullName && requestHeaders.get("oai-authenticated-user-full-name-encoding") === "percent-encoded-utf-8" ? decodeURIComponent(encodedFullName) : null; const displayName = fullName ?? email; // ... } ``` ## 可选的 Dispatch 提供的 ChatGPT 登录 当站点需要可选或必需的 ChatGPT 登录时,请从 `app/chatgpt-auth.ts` 导入开箱即用的辅助函数: - 使用 `getChatGPTUser()` 实现可选的登录 UI。 - 使用 `requireChatGPTUser(returnTo)` 来处理应将匿名访问者引导至通过 Sign in with ChatGpt 登录的服务器渲染页面。 - 使用 `chatGPTSignInPath(returnTo)` 和 `chatGPTSignOutPath(returnTo)` 作为浏览器链接或操作。 - 传入同源的相对 `returnTo` 路径,作为登录或登出后的目标地址。辅助函数会对其进行验证和安全编码。 - 受保护页面需标记 `export const dynamic = "force-dynamic"`,因为它们依赖于每个请求的身份标头。 Dispatch 拥有 `/signin-with-chatgpt`、`/signout-with-chatgpt`、`/callback`、OAuth cookie 以及身份标头注入。请勿为这些保留路径实现应用路由。未导入并调用该辅助函数的路由仍将保持匿名兼容性。 SIWC 仅用于确立身份;它并不能证明工作区成员资格。请使用 Sites 托管平台的访问策略控制来实现工作区范围的限制,或强制执行显式的服务器端成员资格或白名单检查。 请将 SIWC 用于账户页面、特定于用户的仪表板、已保存的记录以及绑定到当前 ChatGPT 用户的写入操作。将公开内容保留为匿名。 ## 实用命令 - `npm run dev`:启动本地开发 - `npm run build`:验证 vinext 构建输出 - `npm test`:构建脚手架并验证其渲染的加载骨架 - `npm run db:generate`:在 schema 更改后生成 Drizzle 迁移 ## 了解更多 - [vinext 文档](https://github.com/cloudflare/vinext) - [Drizzle D1 指南](https://orm.drizzle.team/docs/get-started/d1-new)
标签:Cloudflare, MITM代理, MITRE ATT&CK, 全栈框架, 本地优先, 网络安全, 自动化攻击, 隐私保护