未验证 提交 6f40460c 编写于 作者: 智布道's avatar 智布道 👁 提交者: GitHub

Merge pull request #6 from xkcoding/fix-qq

🐛 修复QQ登录,返回AccessToken以及OpenId数据格式解析错误问题
package me.zhyd.oauth.request; package me.zhyd.oauth.request;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
...@@ -9,9 +10,12 @@ import me.zhyd.oauth.model.AuthSource; ...@@ -9,9 +10,12 @@ import me.zhyd.oauth.model.AuthSource;
import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthToken;
import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUser;
import me.zhyd.oauth.model.AuthUserGender; import me.zhyd.oauth.model.AuthUserGender;
import me.zhyd.oauth.utils.GlobalAuthUtil;
import me.zhyd.oauth.utils.StringUtils; import me.zhyd.oauth.utils.StringUtils;
import me.zhyd.oauth.utils.UrlBuilder; import me.zhyd.oauth.utils.UrlBuilder;
import java.util.Map;
/** /**
* qq登录 * qq登录
* *
...@@ -26,14 +30,17 @@ public class AuthQqRequest extends BaseAuthRequest { ...@@ -26,14 +30,17 @@ public class AuthQqRequest extends BaseAuthRequest {
@Override @Override
protected AuthToken getAccessToken(String code) { protected AuthToken getAccessToken(String code) {
String accessTokenUrl = UrlBuilder.getQqAccessTokenUrl(config.getClientId(), config.getClientSecret(), code, config.getRedirectUri()); String accessTokenUrl = UrlBuilder.getQqAccessTokenUrl(config.getClientId(), config.getClientSecret(), code, config
HttpResponse response = HttpRequest.post(accessTokenUrl).execute(); .getRedirectUri());
JSONObject accessTokenObject = JSONObject.parseObject(response.body()); HttpResponse response = HttpRequest.get(accessTokenUrl).execute();
Map<String, String> accessTokenObject = GlobalAuthUtil.parseStringToMap(response.body());
if (!accessTokenObject.containsKey("access_token")) { if (!accessTokenObject.containsKey("access_token")) {
throw new AuthException("Unable to get token from qq using code [" + code + "]"); throw new AuthException("Unable to get token from qq using code [" + code + "]");
} }
return AuthToken.builder() return AuthToken.builder()
.accessToken(accessTokenObject.getString("access_token")) .accessToken(accessTokenObject.get("access_token"))
.expireIn(Integer.valueOf(accessTokenObject.get("expires_in")))
.refreshToken(accessTokenObject.get("refresh_token"))
.build(); .build();
} }
...@@ -61,9 +68,14 @@ public class AuthQqRequest extends BaseAuthRequest { ...@@ -61,9 +68,14 @@ public class AuthQqRequest extends BaseAuthRequest {
} }
private String getOpenId(String accessToken) { private String getOpenId(String accessToken) {
HttpResponse response = HttpRequest.get(UrlBuilder.getQqOpenidUrl("https://graph.qq.com/oauth2.0/me", accessToken)).execute(); HttpResponse response = HttpRequest.get(UrlBuilder.getQqOpenidUrl("https://graph.qq.com/oauth2.0/me", accessToken))
.execute();
if (response.isOk()) { if (response.isOk()) {
JSONObject object = JSONObject.parseObject(response.body()); String body = response.body();
String removePrefix = StrUtil.replace(body, "callback(", "");
String removeSuffix = StrUtil.replace(removePrefix, ");", "");
String openId = StrUtil.trim(removeSuffix);
JSONObject object = JSONObject.parseObject(openId);
if (object.containsKey("openid")) { if (object.containsKey("openid")) {
return object.getString("openid"); return object.getString("openid");
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册