使用自定义文本的 Google 登录网站

Posted

技术标签:

【中文标题】使用自定义文本的 Google 登录网站【英文标题】:Google Sign In Website Using Custom Text 【发布时间】:2016-04-13 04:32:53 【问题描述】:

我已经按照谷歌的官方教程为我的网站实现了谷歌登录: https://developers.google.com/identity/sign-in/web/sign-in

使用上面的教程,我得到了以下按钮

现在我正在尝试将按钮的文本从“登录”更改为“与 Google 联系”但没有任何反应..

我的 javascript 代码..

           function onSignIn(googleUser) 

            var profile = googleUser.getBasicProfile();
            loginpassword = profile.getId();
            loginemail =  profile.getEmail();
        ;

html 代码..

     <div class="g-signin2" data-onsuccess="onSignIn">Connect with Google</div>

知道如何更改文本吗?即使我提供了客户端 ID 和 platform.js 文件的外部链接,它仍然无法正常工作..请帮助..

【问题讨论】:

【参考方案1】:

来自 google 的 platform.js 库正在渲染按钮以及文本。

要覆盖它,您需要build your own custom button。来自谷歌的例子:

<html>
<head>
  <link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet" type="text/css">
  <script src="https://apis.google.com/js/api:client.js"></script>
  <script>
  var googleUser = ;
  var startApp = function() 
    gapi.load('auth2', function()
      // Retrieve the singleton for the GoogleAuth library and set up the client.
      auth2 = gapi.auth2.init(
        client_id: 'YOUR_CLIENT_ID.apps.googleusercontent.com',
        cookiepolicy: 'single_host_origin',
        // Request scopes in addition to 'profile' and 'email'
        //scope: 'additional_scope'
      );
      attachSignin(document.getElementById('customBtn'));
    );
  ;

  function attachSignin(element) 
    console.log(element.id);
    auth2.attachClickHandler(element, ,
        function(googleUser) 
          document.getElementById('name').innerText = "Signed in: " +
              googleUser.getBasicProfile().getName();
        , function(error) 
          alert(JSON.stringify(error, undefined, 2));
        );
  
  </script>
  <style type="text/css">
    #customBtn 
      display: inline-block;
      background: #4285f4;
      color: white;
      width: 190px;
      border-radius: 5px;
      white-space: nowrap;
    
    #customBtn:hover 
      cursor: pointer;
    
    span.label 
      font-weight: bold;
    
    span.icon 
      background: url('path to your button image') transparent 5px 50% no-repeat;
      display: inline-block;
      vertical-align: middle;
      width: 42px;
      height: 42px;
      border-right: #2265d4 1px solid;
    
    span.buttonText 
      display: inline-block;
      vertical-align: middle;
      padding-left: 42px;
      padding-right: 42px;
      font-size: 14px;
      font-weight: bold;
      /* Use the Roboto font that is loaded in the <head> */
      font-family: 'Roboto', sans-serif;
    
  </style>
  </head>

请注意,您可以找到实际的图标文件on Google's server for download。

设置样式和 Javascript 后,您可以通过 HTML 调用按钮本身,此时您可以指定文本:

  <body>
  <!-- In the callback, you would hide the gSignInWrapper element on a
  successful sign in -->
  <div id="gSignInWrapper">
    <span class="label">Sign in with:</span>
    <div id="customBtn" class="customGPlusSignIn">
      <span class="icon"></span>
      <span class="buttonText">Google</span>
    </div>
  </div>
  <div id="name"></div>
  <script>startApp();</script>
</body>
</html>

请注意,您必须遵守Google's branding guidelines。

【讨论】:

这主要是可行的,但是他们的例子是不完整的,因为谷歌图标 URL 是一个相对于网页服务器的 URI。该示例在从 Google 开发人员的站点提供时有效,因为该图标存在,但默认情况下,任何人都不会在他们自己的服务器上进行测试。 Google 带有品牌内容的 zip 不包含图标,也没有讨论从何处获取官方图标。 @Nick 我已编辑以澄清 Google 示例代码中包含的示例 URL 必须指向有效的图像文件。来自 Google 的示例图标 is available for download。 谢谢,不要敲你的例子,因为谷歌的文档在这里失败了,只是把图标作为例子的一部分,而不是在任何官方位置。期望他们为完整的按钮渲染提供类似于 zip 的图标集,但到目前为止还没有运气。 @Nick 是的,他们的品牌文件以及制作自己的品牌指南的措辞非常混乱。您无法更改图标的大小,但如果您想创建不同大小的自定义图标,请使用示例大小...嗯?【参考方案2】:

或者您可以更改使用 Javascript 生成的跨度文本,试试这个 用代码中的“DivID”替换您的 Div id

setTimeout(function () 
        $('#DivID div div span span:last').text("Sign up with Google");
        $('#DivID div div span span:first').text("Sign up with Google");
    , 3000);

【讨论】:

【参考方案3】:

对于 HTML 部分,例如我们有这样的:

<div id="GoogeSigninButton" data-onsuccess="onSignIn" class="g-signin2"></div>

而对于按钮代码后面的脚本标签,是这样的:

<script>
    setTimeout(function () 
        $('#GoogeSigninButton div div span span:last').text("Custom Sign in Text");
        $('#GoogeSigninButton div div span span:first').text("Custom Sign in Text");
        $('#GoogeSigninButton div div span span:last').css("font-family", "Arial");//for font formatting
        $('#GoogeSigninButton div div span span:first').css("font-family", "Arial");//for font formatting
    , 10000);
</script>

它会在页面加载后 10 秒左右将按钮的文本转换为您需要的自定义文本和自定义字体。

【讨论】:

以上是关于使用自定义文本的 Google 登录网站的主要内容,如果未能解决你的问题,请参考以下文章

自定义 Google 登录按钮 - iOS

有没有办法使用 Spring Security 实现 google 登录和使用 jwt 令牌自定义登录?

Linux 登录 Banner 自定义

有没有办法确定用户是通过自定义 Firebase 帐户还是通过 Flutter 中的 Google 帐户登录的?

自定义的paypal登录过程

居中 Google 登录按钮文本 (iOS)