跳转到正文

Google Login 配置

GitHub

本指南将教你如何使用 Capgo Social Login 设置 Google Login。要设置 Google Login,你需要准备以下内容:

  • 一个 Google 账号

在此部分中,您将配置 Google 显示的登录界面。

  1. 请前往 console.cloud.google.com
  2. 点击项目选择器 Google Console 项目选择器
  3. 如果您还没有项目,请 创建一个新项目.
    1. 点击 New project Google Console 中的“新建项目”按钮
    2. 输入项目名称并点击 Create 项目命名界面,显示名称字段和“创建”按钮
    3. 确保您处于正确的项目中 选择器中显示的工程名称,表明已选中正确的项目
  4. 开始配置 OAuth consent screen
    1. 点击搜索栏

      Google Console 搜索栏
    2. 搜索 OAuth consent screen 并点击它

      搜索结果显示 OAuth 同意屏幕选项
    3. 配置同意屏幕

      点击 create

      OAuth 同意屏幕的用户类型选择,包含 External 和 Internal 选项
  5. 填写应用信息
    1. 我们先从 App Information

      App Information 部分,显示 App name 和 User support email 字段
      • 请输入你的 App Name
      • 输入 user support email
      1. 您 可以 添加应用 Logo。

        OAuth 同意屏幕中的应用 Logo 上传区域
      2. 您 应当 配置 App domain

        包含授权域字段的应用域名配置部分
      3. 您 必须 提供开发者邮箱

        包含邮箱字段的开发者联系信息部分
      4. 点击 save and continue

        表单底部的“保存并继续”按钮
  6. 配置 Scopes
    1. 点击 add or remove scopes

      Scopes 配置界面中的“添加或移除 Scopes”按钮
    2. 选择以下 Scopes 并点击 update

      已勾选 email 和 profile Scopes 的选择对话框
    3. 点击 save and continue

      Scopes 界面中的“保存并继续”按钮
  7. 添加测试用户
    1. 点击 add users 测试用户板块中的“添加用户”按钮
    2. 输入您的 Google 邮箱,按回车,然后点击 add 测试用户的邮箱输入框与“添加”按钮
    3. 点击 save and continue 测试用户页面的“保存并继续”按钮
  8. 点击 back to dashboard 完成页面底部的“返回控制台”按钮
  9. 提交应用进行验证

在使用 Capacitor 时,有多种使用 Google Login 的方式。下表总结了两者之间的区别:

在线访问离线访问
需要后端❌✅
长效访问令牌 (Long-lived access token)❌✅
配置简单✅❌

如果你仍不确定该选哪一个,请参考以下场景:

  1. 你希望用户登录后,立即为其签发自定义 JWT。你的 App 不会调用 Google APIs

    这种情况下,请选择 online access。

  2. 你的 App 会从客户端调用一些 Google APIs,但绝不会从后端调用

    这种情况下,请选择 online access

  3. 你的 App 会从后端调用一些 Google APIs,但仅在用户正在使用 App 时调用

    这种情况下,请选择 online access

  4. 你的 App 会定期检查用户的日历,即使用户当前并未使用 App

    这种情况下,请选择 offline access

online access 的后端示例

标题:“在线访问的后端示例”

在本教程章节中,我将演示如何在您的后端验证用户。

该示例非常简单,将基于以下技术栈:

您可以找到该示例的 code 这里

如下所示:

VS Code 展示了用于验证 token 的 Google 身份验证 code

其核心逻辑非常简单。您只需发送一个简单的 GET 请求到 https://www.googleapis.com/oauth2/v3/tokeninfo 这会返回 token 是否有效;如果有效,还会返回用户的 email 以及该 user token 的其他相关信息。

Google OAuth Playground 显示包含用户详情的 token 信息响应

基于此,你可以为用户签发自定义的 JWT 或发放某种 session cookie。对于最终的鉴权实现,方案是无穷无尽的。

如果你想调用 Google API 的接口,我强烈建议查看 Google OAuth 2.0 Playground。通过它,你可以轻松查看有哪些可调用的 API。

为了使用 offline access,你需要以下条件:

  • 一个 HTTP server

在本例中,我将使用以下技术在应用中实现 offline access:

本示例的 code 可以在这里找到 这里

至于客户端 code,如下所示:

import { Capacitor } from '@capacitor/core';
import { GoogleLoginOfflineResponse, SocialLogin } from '@capgo/capacitor-social-login';
import { usePopoutStore } from '@/popoutStore'; // <-- specific to my app
const baseURL = "[redacted]";
async function fullLogin() {
await SocialLogin.initialize({
google: {
webClientId: '[redacted]',
iOSClientId: '[redacted]',
iOSServerClientId: 'The same value as webClientId',
mode: 'offline' // <-- important
}
})
const response = await SocialLogin.login({
provider: 'google',
options: {
forceRefreshToken: true // <-- important
}
})
if (response.provider === 'google') {
const result = response.result as GoogleLoginOfflineResponse
const res = await fetch(`${baseURL}/auth/google_offline`, {
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
serverAuthCode: result.serverAuthCode,
platform: Capacitor.getPlatform()
}),
method: "POST"
})
if (res.status !== 200) {
popoutStore.popout("Full google login failed", "check console");
return
}
const { jwt } = await res.json();
const userinfo = await fetch(`${baseURL}/auth/get_google_user`, {
headers: {
Authorization: `Bearer ${jwt}`
}
})
if (userinfo.status !== 200) {
popoutStore.popout("Full google (userinfo) login failed", "check console");
return
}
popoutStore.popout("userinfo res", await userinfo.text());
}
}

请注意这里缺少了什么:应用中没有 SocialLogin.refresh() 调用。这是有意为之的。在 Google 离线模式下,刷新会在您的后端完成交换 serverAuthCode 并安全存储 refresh token 之后发生。

如果你正在使用 Google Login 配置 用来规划身份验证和账户流程,并将它与 使用 @capgo/capacitor-social-login 关于使用 @capgo/capacitor-social-login 的原生能力, @capgo/capacitor-social-login 在 @capgo/capacitor-social-login 中查看实现细节, @capgo/capacitor-passkey 有关 @capgo/capacitor-passkey 的实现细节, @capgo/capacitor-native-biometric 以及 @capgo/capacitor-native-biometric 中的实现细节, 双因素认证 有关双重身份验证的实现细节。