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, 全栈框架, 本地优先, 网络安全, 自动化攻击, 隐私保护