java集成google登录(gmail)

2 篇文章 0 订阅
2 篇文章 0 订阅

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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值