第三方登录之接入QQ

第三方登录
placeholder image
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(accessTokenopenID);

      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;


 点赞


 发表评论

当前回复:作者

 评论列表


留言区