显示“使用 Google 帐号登录”按钮

向您的网站添加“使用 Google 帐号登录”按钮,以便用户注册或登录您的 Web 应用。使用 HTML 或 JavaScript 呈现该按钮和属性,以自定义按钮形状、大小、文本和主题。

替代文本

在用户选择 Google 帐号并表示同意后,Google 会使用 JSON Web 令牌 (JWT) 共享用户个人资料。如需简要了解登录期间的体验和用户体验,请参阅工作原理了解个性化按钮一文查看了不同按钮和条件向用户展示的方式。

前提条件

请先完成以下操作,然后再将该按钮添加到您的登录页面:

按钮呈现

如需显示“使用 Google 帐号登录”按钮,您可以选择 HTML 或 JavaScript 来呈现登录页面上的按钮:

HTML

使用 HTML 呈现登录按钮,将 JWT 返回到平台的登录端点。

<html>
  <body>
      <script src="https://accounts.google.com/gsi/client" async defer></script>
      <div id="g_id_onload"
         data-client_id="YOUR_GOOGLE_CLIENT_ID"
         data-login_uri="https://your.domain/your_login_endpoint"
         data-auto_prompt="false">
      </div>
      <div class="g_id_signin"
         data-type="standard"
         data-size="large"
         data-theme="outline"
         data-text="sign_in_with"
         data-shape="rectangular"
         data-logo_alignment="left">
      </div>
  </body>
</html>

具有 g_id_signin 类的元素会呈现为“使用 Google 帐号登录”按钮。该按钮由数据属性中提供的参数自定义。

如需在同一页面上显示“使用 Google 帐号登录”按钮和 Google One Tap,请移除 data-auto_prompt="false"。我们建议您这样做,以便让用户更顺畅地登录帐号。

如需查看数据特性的完整列表,请参阅 g_id_signin 参考文档页面

JavaScript

使用 JavaScript 呈现登录按钮,并将 JWT 返回到浏览器的 JavaScript 回调处理程序。

<html>
  <body>
      <script src="https://accounts.google.com/gsi/client" async defer></script>
      <script>
        function handleCredentialResponse(response) {
          console.log("Encoded JWT ID token: " + response.credential);
        }
        window.onload = function () {
          google.accounts.id.initialize({
            client_id: "YOUR_GOOGLE_CLIENT_ID",
            callback: handleCredentialResponse
          });
          google.accounts.id.renderButton(
            document.getElementById("buttonDiv"),
            { theme: "outline", size: "large" }  // customization attributes
          );
          google.accounts.id.prompt(); // also display the One Tap dialog
        }
    </script>
    <div id="buttonDiv"></div> 
  </body>
</html>

指定为 renderButton 的第一个参数的元素显示为“使用 Google 帐号登录”按钮。在此示例中,buttonDiv 用于呈现页面上的按钮。该按钮是使用 renderButton 的第二个参数中指定的属性进行自定义的。

为了最大限度地减少障碍,系统会调用 google.accounts.id.prompt() 来显示一键快捷功能,而不是使用该按钮注册或登录。

GIS 库会为 ID 属性设置为 g_id_onload 的元素或包含 g_id_signin 的类属性解析元素的 HTML 文档。如果找到匹配元素,那么无论您是否还使用 JavaScript 呈现了该按钮,该按钮也将使用 HTML 进行呈现。为了避免重复显示该按钮,可能是因为参数存在冲突,因此请勿在 HTML 网页中包含与这些名称匹配的 HTML 元素。

按钮语言

按钮语言由浏览器的默认语言或 Google 会话用户的偏好设置自动确定。您也可以通过以下方式手动选择语言:在加载库时向 src 指令添加 hl 参数和语言代码,在 JavaScript 中添加可选的数据语言区域或语言区域参数 data-locale,或在 JavaScript 中添加语言区域

HTML

以下代码段显示了如何通过向客户端库网址添加 hl 参数并将 data-locale 属性设置为法语,以法语显示按钮语言:

<script src="https://accounts.google.com/gsi/client?hl=fr" async defer></script>
...
<div class="g_id_signin"
  data-locale="fr">
</div>

JavaScript

以下代码段举例说明了如何将 hl 参数添加到客户端库网址并调用 google.accounts.id.renderButton 方法,并将 locale 设置为法语,从而显示法语按钮按钮语言:

<script src="https://accounts.google.com/gsi/client?hl=fr" async defer></script>
...
<script>
google.accounts.id.renderButton(
  document.getElementById("buttonDiv"),                
  { locale: "fr" }
);
</script>

凭据处理

在征得用户同意后,Google 会将 JSON Web 令牌 (JWT) 凭据(称为 ID 令牌)返回到用户的浏览器,或直接将其返回到您的平台托管的登录端点。

选择接收 JWT 的位置取决于您是使用 HTML 还是 JavaScript 呈现该按钮,以及是否使用弹出式窗口或重定向用户体验模式。

使用 popup 用户体验模式会在弹出式窗口中执行登录用户体验流程。这通常对用户的干扰性较小,并且是默认用户体验模式。

使用以下代码呈现按钮时:

  • HTML,您可以设置以下任一值:

    • data-callback,用于将 JWT 返回到回调处理程序;
    • data-login_uri,以便 Google 使用 POST 请求将 JWT 直接发送到登录端点。

    如果两个值都设置,则 data-callback 优先于 data-login_uri。 例如,在调试期间使用回调处理程序时,这可能会很有用。

  • JavaScript,您必须设置 callback,在 JavaScript 中呈现按钮时,弹出式模式不支持重定向。如果设置,系统会忽略 login_uri

    如需详细了解如何在 JS 回调处理程序中解码 JWT,请参阅处理返回的凭据响应

重定向模式

使用 redirect 用户体验模式通过用户浏览器的完整页面重定向执行登录用户体验流程,Google 会使用 POST 请求将 JWT 直接返回到您的登录端点。这通常对用户的侵扰性较大,但被认为是最安全的登录方法。

使用以下代码呈现按钮时:

  • HTML 可以选择将 data-login_uri 设置为登录端点的 URI。
  • JavaScript 可以选择将 login_uri 设置为登录端点的 URI。

如果您未提供值,Google 会将 JWT 返回到当前页面的 URI 中。

您的登录端点 URI

设置 data-login_urilogin_uri 时使用 HTTPS 和绝对 URI。 例如 https://example.com/path

仅在开发期间使用本地主机时,才允许使用 HTTP:http://localhost/path

如需全面了解 Google 的要求和验证规则,请参阅使用安全的 JavaScript 来源和重定向 URI