最近在排查 GooseForum 的 GitHub 登录问题时,遇到一个挺隐蔽的坑。 现象是:已经授权过的老用户可以正常登录,但新用户点击 GitHub 登录后,会跳到 GitHub 的 404 页面。URL 看起来又很正常: 一开始我以为是回调地址、client_ id、OAuth 库版本或者 state 校验出了问题。但检查下来发现都不是。 真正的原因是:这个应用创建的是 GitHub App...
最近在排查 GooseForum 的 GitHub 登录问题时,遇到一个挺隐蔽的坑。
现象是:已经授权过的老用户可以正常登录,但新用户点击 GitHub 登录后,会跳到 GitHub 的 404 页面。URL 看起来又很正常:
https://github.com/login/oauth/authorize?client_id=...&redirect_uri=...
一开始我以为是回调地址、client_id、OAuth 库版本或者 state 校验出了问题。但检查下来发现都不是。
真正的原因是:这个应用创建的是 GitHub App,而不是传统的 OAuth App,并且这个 GitHub App 默认还是 Private 状态。
Private 状态下,已有授权关系的账号可能还能继续用,但新的外部用户访问授权页面时,就会直接看到 GitHub 404。这个 404 很迷惑,因为它不像普通配置错误那样给出明确提示。
解决方式是在 GitHub App 设置里打开:
Settings -> Developer settings -> GitHub Apps -> 你的 App -> Advanced -> Danger zone -> Make public
也就是把 GitHub App 从 private 改成 public。
这里的说明是:
Make this GitHub App public
Allow this GitHub App to be installed on other accounts.
改完之后,新用户才能正常进入 GitHub 授权流程。
顺便也确认了一下,GitHub App 和 OAuth App 现在确实是两套东西。GitHub App 也可以用于用户授权登录,但如果是面向公开用户登录,就要注意它的公开状态、callback URL、权限配置这些地方。
这次问题最坑的地方在于:链接看起来完全没问题,代码也没明显错误,GitHub 只给了一个 404。以后如果遇到“老用户能登录,新用户 OAuth 直接 404”,可以优先检查应用是不是还处在 private 状态。