← FC Coder · HomePhase 03 · Lesson 35 · 60 min
Lesson35
Phase Three · Fullstack · Matchday 35 · Who Are You
baby auth
昵称登录 · cookie 认人
Today's 3 Jobs · 今天这三件事
- 01users 表 + lib/auth.ts (login/logout/getCurrentUser)cookie 会员卡
- 02/login 页 + 守护 /fantasyredirect 未登录
- 03🌟 隐身窗口测试 · 两个用户隔离Cookie 分桌
Auth = 谁是你(本质点)。baby auth = 昵称 + cookie · 不教密码 / OAuth(见 ethics 章)。会员卡比喻 —— 服务器 set 一次 · 浏览器每次请求自动带。隐身窗口验证两个用户隔离。AI Supervised + 父亲全程必看(auth 高风险)。
Concept · 会员卡
cookie + httpOnly + 受保护路由
// lib/auth.ts
"use server";
export async function login(formData) {
const c = await cookies(); c.set('user-name', name, { httpOnly: true });
}
"use server";
export async function login(formData) {
const c = await cookies(); c.set('user-name', name, { httpOnly: true });
}
set
cookies().set('user-name', name, {httpOnly:true})
read
cookies().get('user-name')?.value
guard
if (!user) redirect('/login')
baby auth = 昵称 · 不教密码 · 见 docs/ethics/auth-baby.md。
Half 2 · 在屏幕上
ethics · auth · 守护 · 隐身测试
01读 ethics doc + users 表
01Min
Cursor + pnpm dev
老三件套。父亲读 docs/ethics/auth-baby.md 给孩子讲 3 条隐私边界。
02Min
users 表 schema + drizzle-kit push
id 自增 / name unique / createdAt。push 建表。
02auth.ts + /login + 守护
03Min
lib/auth.ts · login(set cookie)/ logout / getCurrentUser
'use server'; cookies() from 'next/headers'。upsert user · set httpOnly cookie maxAge 30 天。
04Min
app/login/page.tsx · form action 调 login + redirect /fantasy
简表单 · 一个 input 输昵称 · 提交跳 /fantasy。
05Min
fantasy/page.tsx 顶 await getCurrentUser · !user → redirect('/login')
守护路由。未登录访问会跳 login。
03🌟 双窗口隔离 + AI logout
06Min
普通窗口 · 登 '哈兰德' · 创建阵容
看 fantasy 能用。DevTools Application · Cookies 看 user-name=哈兰德。
07Min
🌟 隐身窗口 · 访问 /fantasy 跳 /login · 登 '福登'
两窗口 cookie 不互通。福登窗口看不到哈兰德的阵容。
08Min
双窗对比 · 不同 user · 各自阵容(下节课才真隔离)
今天 cookie 隔离已经做完 · 但 squads 还没和 user 关联(36 课做)。
09Min
AI Supervised:加 /logout · 按钮调 logout action
Cmd+K · '加 logout 按钮 · 调 logout action · redirect /login'。父亲必看(auth 高风险代码)。
10Min
📸 截图两个窗口
Phase 3 第十张战利品。
讲给爸爸听
4 题 · Auth 心法
01Cookie 干什么?Hint ↓
浏览器的会员卡。服务器 set 一次 · 之后自动带。认人凭它。
02httpOnly 是什么?Hint ↓
JS 读不了这个 cookie · 防 XSS 偷会话。安全规矩。
03隐身窗口为什么变另一个用户?Hint ↓
隐身独立 cookie jar · 服务器看空 cookie · 不知道你是谁。
04为什么不教密码?Hint ↓
baby auth 是体验 · 不是真账户。9 岁不应有真账户(COPPA)。Phase 5 安全章升级。
温度计
给「会员卡」打分
今天难度Difficulty
0
今天开心Fun
0
Final Whistle · 终场哨
服务器认得你了 —— cookie 是你的会员卡。
还有 10 步没打勾。Step 7 隐身窗口验证 = 算过。