(一)QQ登陆
(1)基本调用过程分析:
①生成授权连接,需要配置回调地址
https://graph.qq.com/oauth2.0/authorize?response_type=code&
client_id=xxxxxxxx&redirect_uri=http://127.0.0.1:8080/mobile/qqLoginCallback&
state=1234656
②通过授权码换取assessToken,配置回调地址
https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&
client_id=xxxxxxxx&client_secret=xxxxxxxx
&redirect_uri=http://127.0.0.1:8080/mobile/qqLoginCallback
③使用assessToken换取openid
https://graph.qq.com/oauth2.0/me?access_token=xxxxxxxx
④使用openid和assessToken获取用户信息和openid
https://graph.qq.com/user/get_user_info?
access_token=xxxxxxxx&
oauth_consumer_key=12345&
openid=xxxxx
(2)代码:
①准备工作:
下载官方demo: qqConnect_Server_SDK_java_v2.0
将qqconnectconfig.properties保存到resources目录下,
②用户点击QQ登录链接请求地址:
@RequestMapping("/QQLogin")
public String localQQLogin(HttpServletRequest request) throws QQConnectException{
String authorizeURL = new Oauth().getAuthorizeURL(request);
return "redirect:" + authorizeURL;
}
③跳转到授权页面后点击确认登录回调地址
@RequestMapping("/qqLoginCallback")
public String qqLoginCallback(HttpServletRequest request, HttpSession httpSession, HttpServletResponse response) {
try {
//获取授权码code,已经在request中
//直接传递request,利用已经封装好的代码请求获得accessToken
AccessToken accessTokenObj = new Oauth().getAccessTokenByRequest(request);
if(accessTokenObj == null) {
return setErrorMsg(request, "qq授权失败!", "error");
}
String accessToken = accessTokenObj.getAccessToken();
if(StringUtils.isEmpty(accessToken)) {
return setErrorMsg(request, "qq授权失败!", "error");
}
//根据accessToken获取openid
OpenID openIdObj = new OpenID(accessToken);
String userOpenId = openIdObj.getUserOpenID();
/**
* 根据openid去db查看是否已经存在关联的用户
* 若存在那么直接登陆
* 否则跳到管理用户界面
*/
Map<String, Object> openIdMap = userFeign.findLogin(userOpenId);
Integer code = (Integer) openIdMap.get(BaseApiConst.HTTP_CODE_NAME);
// 判断是否绑定会员
if (code.equals(BaseApiConst.HTTP_200_CODE)) {
// 已经授权过,自动登录
String token = (String) openIdMap.get("data");
CookieUtil.addCookie(response, Const.USER_TOKEN, token,
Const.WEBUSER_COOKIE_TOKEN_TERMVALIDITY);
return "index";
}
// 没有绑定openid,跳转到绑定账户页面(绑定已有账户或者去新注册账户)
httpSession.setAttribute("openid", userOpenId);
} catch (Exception e) {
}
return "bindaccount";
}
③用户之前没有注册,那么调到绑定账户页面。两个选择绑定账号或者注册新账号,需要注意账号关联openid.
(二)手机号免注册登陆
①登陆接口由两种类型:用户名和密码 手机号
②用户输入手机号以及校验码后把信息传送给后台,后台服务判断登陆方式是哪种
③若用户密码,手机号都有那么走用户密码登录,否则走手机号登录。
④根据手机号从数据库查询获取数据。
若数据为空,那么实现自动注册功能。
若数据非空,那么修改信息(最后一次登录时间)
⑤登录成功后赋予用户权限
⑥写入session