private final Logger log = LoggerFactory.getLogger(this.getClass());
//验证口令
private static String verify_url = "https://graph.facebook.com/debug_token";
//获取应用口令
private static String app_url = "https://graph.facebook.com/v2.8/oauth/access_token";
private static final long appTokenExpired = 2 * 60 * 60;
@Value("${app.facebook.login.client-id}")
private String clientId;
@Value("${app.facebook.login.client-secret}")
private String clientSecret;
@Autowired
private RedisCache redisCache;
@Autowired
private AccountManager accountManager;
@Autowired
private UserForbiddenManager userForbiddenManager;
@Autowired
private SmsService smsService;
@Override
public AccountThirdBO process(LoginRequest req) {
if (StringUtils.isEmpty(req.getAccessToken())) {
throw new BusinessException(ResultEnum.PARA_ERR);
}
String provider = AccountConstant.ProviderEnum.facebook.toString();
String thirdId = getFacebookUnionId(req.getAccessToken());
AccountIndex accountIndex = accountManager.getAccountIndex(provider, thirdId);
boolean unregistered = accountIndex == null;
if (!unregistered) {
accountManager.checkPhoneValidation(accountIndex.getUid());
}
List<ThirdInfo> thirdInfoList = new ArrayList<>();
thirdInfoList.add(new ThirdInfo(provider, thirdId, thirdId, ""));
return new AccountThirdBO(thirdInfoList,
accountIndex == null ? null : accountIndex.getUid(),
unregistered,
false,
unregistered);
}
private String getFacebookUnionId(String accessToken) {
HashMap<String, String> params = new HashMap<String, String>();
//应用口令
String access_token = getAppToken();
params.put("input_token", accessToken);
params.put("access_token", access_token);
String data = null;
String result = HttpInvokeUtil.httpGet(verify_url, params);
log.info("getFacebookUnionId result:{}", result);
JSONObject jsonObject = JSON.parseObject(result);
data = jsonObject.getString("data");
JSONObject dataObject = JSON.parseObject(data);
return dataObject.get("user_id").toString();
}
public String getAppToken() {
String key = RedisConstant.FACEBOOK_LOGIN_APP_TOKEN;
String appToken = redisCache.getCache(key, String.class);
if (StringUtils.isEmpty(appToken)) {
HashMap<String, String> params = new HashMap<String, String>();
params.put("client_id", clientId);
params.put("client_secret", clientSecret);
params.put("grant_type", "client_credentials");
String result = HttpInvokeUtil.httpGet(app_url, params);
log.info("getAppToken result:{}", result);
JSONObject jsonObject = JSON.parseObject(result);
appToken = jsonObject.getString("access_token");
redisCache.putCacheWithExpireTime(key, appToken, appTokenExpired);
}
return appToken;
}
}
facebook第三方登陆服务器验证
最新推荐文章于 2023-03-27 14:36:48 发布