1.google开发者账号配置

1.1创建一个项目

1.2:创建凭证
进入凭据页面,左上角选择自己的项目

创建客户端ID

1.3: google回调方式有两种 (客户端配置不同)

        本次使用第二种前端的方式data-callback接受google回调,拿着google令牌去后台服务器进行验证登录(推荐第二种简便)

        1.4: 第一种是data-login_ur表示授权后通知放回给后台服务器(服务器回调接口路径)

             第一种是java服务器接受回调需要跟前端有通信相比第二种会比较麻烦需要的话看下面这个链接

https://blog.csdn.net/m0_72293405/article/details/142098755?spm=1001.2014.3001.5501

        1.5:第二种是data-callback表示授权后回调给前端方法(前端全局挂在的方法)
            1.5.1:本地调式直接填localhist,线上需要填域名,类型选择web类型。创建完会有一个客户端ID后端要使用到

2.前端代码 (vue)

        2.1需要导入google 的 js库,注意vue的钩子函数生命周期,created()里动态导入即可
https://accounts.google.com/gsi/client
//加载googel一键登录js库
const oScript = document.createElement('script');
oScript.src = this.redirectUri;
document.body.appendChild(oScript);
        2.2html代码,data-client_id填入1.2创建的客户端ID
<div class="g-signin-button">
            <div id="g_id_onload"
                 data-client_id="clientId"
                 data-context="signin_with"
                 data-ux_mode="popup"
                 data-callback="googleSignCallBack"
                 data-close_on_tap_outside="false"
                 data-itp_support="false">
            </div>

            <div class="g_id_signin"
                 data-type="standard"
                 data-shape="pill"
                 data-theme="outline"
                 data-text="signin_with"
                 data-size="medium"
                 data-logo_alignment="center"
                 data-locale="en-US"
                 data-width="340">
            </div>
          </div>
         2.3将data-callback="googleSignCallBack"属性的googleSignCallBack方法注册为全局函数不然google回调找不到
window.googleSignCallBack = this.googleSignCallBack; // 关键:将方法注册为全局函数
        credential:授权完成后的类似于token后台用于解析获取google账户信息 
 //在回调方法中获取登录用的凭证,并发送给后台进行登录
    googleSignCallBack (googleUser) {
      let credential = googleUser.credential;
      //发送后台接口验证完整性 && 登录
    },

3.服务后台验证接口 

        3.1:验证方式1 需要外网服务器
 GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(new NetHttpTransport(), new GsonFactory())
.setAudience(Collections.singletonList(CLIENT_ID))
.build();
//验证登录回调的credential完整性
GoogleIdToken idToken = verifier.verify(jsonObject.getString("credential"));
if (idToken != null) {

GoogleIdToken.Payload payload = idToken.getPayload();
String email = payload.getEmail();

//写自己的登录业务

}
        3.2:验证方式2本地开启vpn可以测试
GoogleIdToken idToken = GoogleIdToken.parse(GsonFactory.getDefaultInstance(), 
google.getCredential());
GoogleIdToken.Payload payload = idToken.getPayload();
google.setSub(payload.getSubject());
google.setAud(payload.getAudience().toString());
google.setUserName(payload.getEmail());
google.setNickName((String) payload.get("name"));
//登录业务

4.POM依赖


<!--  版本  -->
<google-api.version>1.32.1</google-api.version> 


<!--  google一键登录  -->
        <dependency>
            <groupId>com.google.api-client</groupId>
            <artifactId>google-api-client</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.oauth-client</groupId>
            <artifactId>google-oauth-client-jetty</artifactId>
        </dependency>

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐