一、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: 处理自己的业务
}
}
}
}