配置 Google OAuth
配置 Google Auth Platform,创建 Web 应用客户端,并接通 Saavo 的 Google 登录和 One Tap。
Saavo 支持普通的 Google OAuth 登录,也支持可选的 Google One Tap。两种方式可以使用同一个 Web application Client ID,但配置要求不同:
- 普通 Google 登录依赖完整的 Authorized redirect URI;
- Google One Tap 还要求当前站点出现在 Authorized JavaScript origins 中,并在 Saavo 配置里显式开启。
模板的普通登录流程只申请 openid、email 和 profile,用于确认用户身份、邮箱、姓名和头像,不会申请 Gmail、Drive 等权限。
先整理要填写的地址
Google 登录的默认回调路径在 config/deploy.ts 中:
ui: {
oauthRedirectTo: {
github: '/api/auth/oauth2/github',
google: '/api/auth/oauth2/google',
},
},以 WebpageToPDF 为例,需要准备:
| 环境 | Authorized JavaScript origin | Authorized redirect URI |
|---|---|---|
| 本地 | http://127.0.0.1:5173 | http://127.0.0.1:5173/api/auth/oauth2/google |
| 首次部署 | https://<实际的 workers.dev 域名> | https://<实际的 workers.dev 域名>/api/auth/oauth2/google |
| 正式域名 | https://webpagetopdf.dev | https://webpagetopdf.dev/api/auth/oauth2/google |
JavaScript origin 只能包含协议、主机名和端口,不能带路径。Redirect URI 必须包含完整回调路径。两者不能互换。
先运行 npm run dev,使用终端实际显示的本地地址。如果 Vite 换了端口,Google Cloud 中的本地 Origin 和 Redirect URI 都要一起更新。生产环境则以 .env.production 中的 VITE_SITE_URL 为准。
创建 Google Cloud 项目
进入 Google Auth Platform
登录 Google Cloud Console,在顶部选择已有项目,或者新建一个专门用于 WebpageToPDF 登录的项目。然后打开 Google Auth Platform。

不要随便复用不清楚用途的旧项目。OAuth 品牌、用户范围和客户端凭据都属于当前 Google Cloud 项目,选错项目后创建的 Client ID 也会跟着留在错误的项目中。
创建 OAuth 同意屏幕
在 Google Cloud 侧边栏,点击 Oauth consent screen 菜单。

进入 Google Auth Platform 的配置页面。

点击右侧中间的 Get Started 按钮,进入配置详情:

填写应用名称、选择邮箱等信息后,进入下一步。

选择 External 选项,点击下一步。

填写联系人信息后,进入下一步,勾选协议,点击 Create 按钮创建。
设置 Branding
创建完成后,会自动跳转到 Branding 页面,在这个页面中可以补全 App 的相关信息。

其中 Authorized domains 是必填项,其它的选项我也推荐填写,以增加审核通过的概率。
填写完点击 Save 按钮保存。
Google 对 Branding、Audience 和 Data Access 的界面会持续调整,最新入口和字段含义以 Google Identity Services 设置说明为准。
创建 OAuth 客户端
新建 Web application 客户端
在 Google Auth Platform 中打开 Clients 页面:

点击 Create client,Application type 选择 Web application。名称可以填写 Webpage to PDF。

不要选择 Desktop app、Chrome extension 或其他类型。Saavo 的回调由网站服务端接收,需要 Web application 客户端。
添加 JavaScript origins
在 Authorized JavaScript origins 中添加实际会显示 Google One Tap 的站点 Origin,例如:
http://127.0.0.1:5173
https://webpagetopdf.devOrigin 不包含结尾路径,也不使用通配符。

如果你暂时不开启 One Tap,普通 OAuth 登录不依赖这里的配置,但建议在创建客户端时一并填好,后面启用 One Tap 时可以直接使用。
添加 redirect URIs
在 Authorized redirect URIs 中添加完整回调地址,例如:
http://127.0.0.1:5173/api/auth/oauth2/google
https://webpagetopdf.dev/api/auth/oauth2/google如果仍在使用 workers.dev 地址,也要把它对应的完整回调地址加入列表。

Google 要求实际请求中的 Redirect URI 与这里登记的地址完全一致,包括 http 或 https、主机名、端口、大小写、路径和末尾斜杠。
保存 Client ID 和 Client Secret
点击 Create。创建完成后立即保存 Client ID 和 Client Secret。Client ID 通常以 .apps.googleusercontent.com 结尾。

Client Secret 只能放在服务端环境中,不能写进前端代码或提交到 Git。
Google 对 Web application 客户端和地址格式的完整要求见 Get your Google API client ID 和 Manage OAuth clients。
配置本地环境
在项目根目录的 .env 中填写:
GOOGLE_CLIENT_ID="你的 Google Client ID"
GOOGLE_CLIENT_SECRET="你的 Google Client Secret"保存后重启开发服务器:
npm run doctor
npm run dev登录和注册页面会在两项凭据都存在时启用 Google 登录。只填写 Client ID 不够,因为普通 OAuth 登录需要服务端使用 Client Secret 交换授权码。
配置生产环境
第一次部署完成后,在 .env.production 中填写生产环境使用的凭据:
GOOGLE_CLIENT_ID="生产环境的 Google Client ID"
GOOGLE_CLIENT_SECRET="生产环境的 Google Client Secret"然后运行:
npm run doctor:remote
npm run deploy:update部署时,Client ID 会作为 Worker Variable,Client Secret 会作为加密 Secret 同步到 Cloudflare。不要只修改 Cloudflare Dashboard;Saavo 后续仍以 .env.production 为生产配置来源。
如果还没有完成第一次部署,可以暂时留空 OAuth 变量并运行 npm run deploy:init。拿到实际 workers.dev 地址后,将对应的 Origin 和 Redirect URI 添加到 Google Cloud,再填写 .env.production 并运行 npm run deploy:update。
以后改用自定义域名时,需要同时完成三件事:
- 在 Google Cloud 的 Authorized JavaScript origins 中加入新 Origin;
- 在 Authorized redirect URIs 中加入新域名对应的完整 Google 回调地址;
- 确认
.env.production中的VITE_SITE_URL已经是新 Origin,并重新部署。
是否开启 Google One Tap
普通 Google 登录配置完成后,用户已经可以从登录或注册页面进入 Google 授权。One Tap 是额外功能,默认关闭:
auth: {
enableGoogleOneTap: false,
},需要启用时改为:
auth: {
enableGoogleOneTap: true,
},启用前确认当前页面的 Origin 已经登记在 Google Cloud 的 Authorized JavaScript origins 中。正式环境必须使用 HTTPS;本地开发可以使用 http://localhost 或本机回环地址。保存配置后,本地重启 npm run dev,生产环境运行 npm run deploy:update。
One Tap 可能被浏览器隐私设置、第三方 Cookie 策略、FedCM 设置或扩展拦截。它没有出现时,登录页上的普通 Google 登录仍应可用,不要把 One Tap 是否弹出作为唯一验收标准。
验证 Google 登录
至少完成下面几项:
- 打开登录页,确认能看到 Google 登录入口;
- 点击入口,确认 Google 显示的应用名称和请求权限正确;
- 同意登录,确认浏览器回到 Saavo,并成功建立登录会话;
- 退出后用同一个 Google 账号再次登录,确认不会重复创建用户;
- 使用另一个允许访问该应用的 Google 账号测试新用户注册;
- 如果开启了 One Tap,再用未登录本站但已登录 Google 的浏览器单独测试提示框。
本地、workers.dev 和正式域名使用不同 Origin,至少要在最终对外使用的域名上完整测试一次。