第三方登录之接入QQ
第三方登录admin 发布于:2019-01-09 15:40:29
阅读:loading
基本上所有的使用第三方账号登录都主要分为两个部分:
第一:在其开发者中心(或开放平台)创建工程,并配置工程相关信息;
第二:选择登录接入的方式(下载开发相关资源),并将登录代码集成至具体的开发应用中;
使用QQ账户登录可能是第三方登录使用最广泛的了,基本人人都有QQ号(只对开通有QQ空间的可用),最早的时候研究过一段时间它的接入,不过当时只是作为一个demo,将QQ登录的用户相关信息输出在页面上(仅仅是打印出来,不做任何记录,只是告诉你其实我是有实力去接入的),近期是要接入QQ账号来替代本网站的用户注册,所以说就重新了解了一下下,将获取到的用户昵称、头像、ID信息给存储至用户表中了。
大家可放心的使用账号登录,本站获取不到你的相关信息QQ号码绝对获取不到,甚至获取到的ID信息也是可变的(根据APP绑定的),也就是说使用同一个QQ号授权给不同的应用,他们的ID是不一样的。
本站以前有给出过关于QQ互联的登录接入的相关文章,本次就直接给出代码了,至于对应的授权过程,我相信你肯定是有对其他的网站授权登录过,此处略过,参考代码为:
#接入qq登录
tencent.connect.app_ID = 1015XXXXX
tencent.connect.app_KEY = 690fef98d03a01c7f1XXXXXXXXXXX
tencent.connect.redirect_URI=http://www.chendd.cn/XXXXXXXXXX
tencent.connect...参数较多=省略
@Controller
@Scope("prototype")
@RequestMapping("/tencent-login")
public class TencentLoginController extends ThirdLoginConnectController {
@RequestMapping("/tencentConnect")
public void tencentConnect() throws Exception {
response.setContentType("text/html;charset=utf-8");
try {
String redrectUrl = new Oauth().getAuthorizeURL(request);
response.sendRedirect(redrectUrl);
} catch (Exception e) {
throw new Exception("接入Tencent QQ登录认证出现错误");
}
}
@RequestMapping("/tencentCallback")
public void tencentCallback() throws SystemErrorException , Exception {
response.setContentType("text/html; charset=utf-8");
AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request);
if (accessTokenObj.getAccessToken().equals("")) {
//我们的网站被CSRF攻击了或者用户取消了授权
//做一些数据统计工作
throw new Exception("没有获取到响应参数");
}
String accessToken = accessTokenObj.getAccessToken();
OpenID openIDObj = new OpenID(accessToken);
String openID = openIDObj.getUserOpenID();
UserInfo qzoneUserInfo = new UserInfo(accessToken, openID);
UserInfoBean userInfoBean = qzoneUserInfo.getUserInfo();
SysUser tmpUser = new SysUser();
if (userInfoBean.getRet() == 0) {
String nickName = userInfoBean.getNickname();
tmpUser.setRealName(nickName);
String userImage = userInfoBean.getAvatar().getAvatarURL100();
tmpUser.setUserImage(userImage);
} else {
LogUtil.infoLog("很抱歉,我们没能正确获取到您的信息,原因是: " + userInfoBean.getMsg());
tmpUser.setRealName("QQ匿名用户");
tmpUser.setUserImage(CommonUtils.getRealPath(request) + "/app/images/third/qq/qq100.png");//默认的qq头像
}
System.out.println(tmpUser.toString());
//此处改重定向了
}
public String reloadImgUrl(String url) {
if (StringUtils.isNotEmpty(url)) {
if (url.charAt(url.length() - 1) == '/') {
url = StringUtils.substringBeforeLast(url, "/");
}
}
return url;
}
}
(1)、将登录接入的参数文件放置在同一个配置文件中的问题,参考其它接入时的解释,修改代码为(添加同名类com.qq.connect.utils.QQConnectConfig,修改其中的取数key);
(2)、有的时候在授权接入的时候会提示"没有获取到响应参数",这个原因没有具体的去查找过,发现只要在授权的页面是输入http://www.chendd.cn完整的路径(带http://)时就是没问题的;
(3)、接入QQ互联登录的应用信息填写后需要审核,如果未审核通过则只能本QQ号码测试授权,其它QQ号码授权时会有相应的错误提示,参考后台审核填写规则如下(咨询客户给的回复):
网站应用部分应用信息填写参考说明:
网站名称:ICP备案信息中的网站名称(或含有备案名称关键词)
网站地址:ICP备案中的域名地址(或者含有相关主域名)
主办单位名称:ICP备案中的主办单位名称
网站备案号:ICP备案号
这个是审核要求,要严格按照要求填写
(4)、用户头像地址在最后一个字符如果是/时,需要将此斜杠去掉才能正常访问,否则404;
点赞