Apple&Google(新版) web端三方登陆接入

2,021 阅读2分钟

1、Google

搜索Google Login Api 会发现原先基于platform.js的登陆功能即将弃用,

Untitled.png 官方推荐使用新版登陆API

step1: 接入谷歌原生登陆按钮的示例代码如下:

<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" }  // 设置按钮样式
          );
          google.accounts.id.prompt(); // 自动弹出登陆提示弹框
        }
    </script>
    <div id="buttonDiv"></div> 
  </body>
</html>

根据示例代码可以发现,初始化登陆实例我们需要一个“客户端ID”("YOUR_GOOGLE_CLIENT_ID")

step2:新建项目得到客户端ID

谷歌云服务页面登陆后新建一个项目

Untitled 1.png

进入新建的项目 选择左侧APIS&services Tab,然后新建”凭据“,选择“OAuth Client Id”

然后勾选 “Web Application” 点击创建

Untitled 2.png

然后你就得到了一个客户端ID,复制到刚刚示例的初始化代码中“client_id”字段

Untitled 3.png

为了支持本地测试环境测试,我们还需要在这个客户端ID中配置一些允许登陆访问的地址

Untitled 4.png

*⚠️注意此处如果要添加localhost,必须同时添加带端口号和不带端口号的地址

step3:本地测试

将示例代码运行起来可以看到效果如下

Untitled 5.png

登陆完成后会自动执行示例代码中“handleCredentialResponse”回调函数,返回JWT

Untitled 6.png

利用拿到的JWT就可以做后续的操作啦!

实际测试环境中可能会遇到的问题:

1、生产环境允许登陆访问URL, 谷歌只允许我们配置https协议,但是某些情况下我们的网站只支持http

这时就需要用到一些代理工具来走通这套流程,这边使用Whistle结合SwitchyOmega

  • 首先我们使用Whistle 将https代理到http

规则例如:www.test2.com/ www.test2.com/

(如果原先的接口地址采用//开头,还需要将https代理回http)

  • 其次由于墙的原因,whistle代理与VPN代理冲突,需要用到Switch Omega

新建场景——>自动切换模式——>将谷歌相关域名配置到VPN代理,默认代理走Whistle

Untitled 7.png

2、Apple

苹果登陆首先需要一个开发者账号(需要付费订阅)申请到clientId,具体申请流程不展开了

step1: web登陆配置

Configuring your webpage for Sign in with Apple

实例代码:

<html>
    <head>
    </head>
    <body>
        <script type="text/javascript" src="https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js"></script>
        <div id="appleid-signin" data-color="black" data-border="true" data-type="sign in"></div>
        <script type="text/javascript">
            // 初始化
            AppleID.auth.init({
                clientId : '[CLIENT_ID]',
                scope : 'name email',
                redirectURI : 'https://test2.com',
                usePopup : true
            });
        </script>
    </body>
    <script>
      // 登陆成功后的回调函数
      document.addEventListener('AppleIDSignInOnSuccess', (event) => {
        // Handle successful response.
        console.log(event.detail.data);
      });
​
      // 登陆失败后的回调函数
      document.addEventListener('AppleIDSignInOnFailure', (event) => {
        // Handle error.
        console.log(event.detail.error);
      });
    </script>
</html>

*⚠️这里的redirectURI,必须使用https协议,并且在clientId配置项里进行过注册,还要与当前登陆发起的地址一致

step2: 登陆成功后拿到JWT,就可以进行后续操作了!

Untitled 8.png