返回全栈开发
PATH 02/LESSON 12/25 分钟

GitHub 登录与权限

画出 GitHub 登录到进度同步的流程,列出未登录、回调失败和越权查询的预期结果。

课程全目录 · 选择章节

本课学习目标

  • • 理解 — OAuth 让第三方确认身份,但应用仍需建立自己的会话与权限规则。登录回调要验证状态并限制跳转目标;数据库查询必须按当前用户过滤。认证回答你是谁,授权回答你可以做什么,两者缺一不可。
  • • 应用 — GitHub 登录后,用户只能读取自己的学习记录。即使在请求正文传入别人的 userId,接口也应从服务端会话取得真实身份并拒绝越权。
  • • 验证 — 画出 GitHub 登录到进度同步的流程,列出未登录、回调失败和越权查询的预期结果。

完成路径

阅读概念与案例 → 完成动手任务 → 勾选实践检查 → 回答检查点 → 保存完成记录。练习由你自行检查,不会假装成自动代码评分。

01 / 核心概念

OAuth 让第三方确认身份,但应用仍需建立自己的会话与权限规则。登录回调要验证状态并限制跳转目标;数据库查询必须按当前用户过滤。认证回答你是谁,授权回答你可以做什么,两者缺一不可。

GitHub 登录后,用户只能读取自己的学习记录。即使在请求正文传入别人的 userId,接口也应从服务端会话取得真实身份并拒绝越权。

不要将用户提交的 ID 当作身份,也不要将服务端管理密钥放到前端。跨站写请求、会话过期和回调白名单都需要单独处理。

02 / 心智模型

01

理解

OAuth 让第三方确认身份,但应用仍需建立自己的会话与权限规则。登录回调要验证状态并限制跳转目标;数据库查询必须按当前用户过滤。认证回答你是谁,授权回答你可以做什么,两者缺一不可。

02

应用

GitHub 登录后,用户只能读取自己的学习记录。即使在请求正文传入别人的 userId,接口也应从服务端会话取得真实身份并拒绝越权。

03

验证

画出 GitHub 登录到进度同步的流程,列出未登录、回调失败和越权查询的预期结果。

03 / 代码骨架

TYPESCRIPT / CONCEPT
const user = await requireSession(request);
const notes = await database.notes.findMany({ ownerId: user.id });

这是解释结构的代码骨架,外部函数与数据需要在实际项目中实现。

04 / 贯穿案例

放进真实情境里看

GitHub 登录后,用户只能读取自己的学习记录。即使在请求正文传入别人的 userId,接口也应从服务端会话取得真实身份并拒绝越权。

  1. 01

    分析边界

    OAuth 让第三方确认身份,但应用仍需建立自己的会话与权限规则。登录回调要验证状态并限制跳转目标;数据库查询必须按当前用户过滤。认证回答你是谁,授权回答你可以做什么,两者缺一不可。

  2. 02

    观察具体过程

    GitHub 登录后,用户只能读取自己的学习记录。即使在请求正文传入别人的 userId,接口也应从服务端会话取得真实身份并拒绝越权。

  3. 03

    验证失败路径

    不要将用户提交的 ID 当作身份,也不要将服务端管理密钥放到前端。跨站写请求、会话过期和回调白名单都需要单独处理。

05 / 动手做

用自己的产物检验理解

画出 GitHub 登录到进度同步的流程,列出未登录、回调失败和越权查询的预期结果。

完成时检查

  • 提交可阅读的实现或流程图,并注明输入和输出。
  • 至少覆盖一个成功案例与一个失败案例。
  • 解释本课的边界,写出仍未解决的一项限制。

自动保存在当前浏览器,不会同步到账户。

继续到代码练习

06 / 检查点

GitHub 登录成功后,是否自动能读所有学习记录?

延伸阅读 · 原始资料