基于java的完整版google、facebook一键登录详细教程

5,349 阅读1分钟

一、Google 一键登录代码

1、导入jar包

<!--将下列代码拷贝到你本地的pom.xml中-->
<dependency>
    <groupId>com.google.api-client</groupId>
    <artifactId>google-api-client</artifactId>
    <version>1.30.10</version>
</dependency>

2、代码示例

// googleKey 为google控制台的key,类似 **************apps.googleusercontent.com
GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(new NetHttpTransport(),
        JacksonFactory.getDefaultInstance()).setAudience(Collections.singletonList(googleKey)).build();
GoogleIdToken idToken = verifier.verify(token); // 该token为前端传入的id_token
GoogleIdToken.Payload payload = idToken.getPayload();

// payload 对象为邮箱详细信息,列出其部分属性说明
payload.getEmail() // 邮箱地址
payload.getSubject() // userId(唯一编码)如果是注册可作为登录密码使用

// TODO: 获取对象属性后进行自己的业务逻辑处理

二、FaceBook 一键登录代码

// 为固定值
private final static String USER_URL = "https://graph.facebook.com/me";
// 可根据需求增减
private final static String FIELDS = "id,name,birthday,gender,hometown,email,devices";
// 引入http请求方式
private OkHttpClient okHttpClient;

// token 为前端传入的access_token
private void buildFaceBook(String token) {
    try {
        String url = String.format("https://graph.facebook.com/debug_token?access_token=%s&input_token=%s", faceAppIdKey + "%7C" + faceAppSecretKey, token);
        Request postRequest = new Request.Builder()
                .url(url).build();
        Response urlResponse = okHttpClient.newCall(postRequest).execute();
        if (urlResponse.isSuccessful()) {
            String json = urlResponse.body().string();
            JsonNode jsonNode = JacksonUtil.decodeToNode(json);
            JsonNode jsonData = jsonNode.get("data");
            if (jsonData != null) {
                // is_valid = true 验证通过,is_valid = false 验证失败
                boolean is_valid = jsonData.get("is_valid").asBoolean();
                getEmailDetails(token, is_valid);
            }
        }
    } catch (Exception e) {
        log.error("buildFaceBook|{}", e.getMessage());
    }
}

private void getEmailDetails(String token, boolean is_valid) throws IOException {
    if (is_valid) {
        HttpUrl.Builder urlBuild = HttpUrl.parse(USER_URL).newBuilder().addQueryParameter("access_token", token).addQueryParameter("fields", FIELDS);
        Request request = new Request.Builder().url(urlBuild.build()).build();
        Response response = okHttpClient.newCall(request).execute();
        if (response.isSuccessful()) {
            String emailJson = response.body().string();
            JsonNode emailNode = JacksonUtil.decodeToNode(emailJson);
            if (emailNode != null) {
                // 邮箱地址
                String email = emailNode.get("email").asText();
                // 邮箱ID
                String id = emailNode.get("id").asText();
                
                // TODO: 处理自己的业务
            }
        }
    }
}