前期准备

1、首先开发者需要登录QQ互联,进行开发者认证,这里需要

  • 个人基本信息
  • 一张手持身份证的张片

2、进入应用管理页面,依次点击:应用管理 -> 网站应用 -> 创建应用,应用信息提交后,等待审核通过即可,这一步我们需要注意的是:

  • 网站域名需要提前备案
  • 网站信息要和备案信息一致

QQ登录实现

这里为了简单,我们使用JustAuth来实现QQ登录,该项目集成了Github、Gitee、QQ、微博等等第三方登录,号称史上最全的整合第三方登录的开源库。

另外为了方便演示,就不使用SpringBoot了,只用Vert.x搭建简单的服务。

1、导入依赖,其中hutool是一个工具类库

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.3</version>
</dependency>
<dependency><groupId>me.zhyd.oauth</groupId><artifactId>JustAuth</artifactId><version>1.15.2-alpha</version>
</dependency>
<dependency><groupId>io.vertx</groupId><artifactId>vertx-core</artifactId><version>3.2.0</version>
</dependency>
<dependency><groupId>io.vertx</groupId><artifactId>vertx-web</artifactId><version>3.2.0</version>
</dependency>

2、实现服务端代码

package com.qianyu;import cn.hutool.json.*;
import io.vertx.core.*;
import io.vertx.core.http.*;
import io.vertx.ext.web.*;
import me.zhyd.oauth.config.*;
import me.zhyd.oauth.model.*;
import me.zhyd.oauth.request.*;
import me.zhyd.oauth.utils.*;public class Server {private static AuthQqRequest authQqRequest;private static AuthRequest createAuthRequest() {if (authQqRequest == null) {authQqRequest = new AuthQqRequest(AuthConfig.builder().clientId("你的client id").clientSecret("你的client secret").redirectUri("你的回调地址").build());}return authQqRequest;}public static void main(String[] args) {Vertx vertx = Vertx.vertx();Router router = Router.router(vertx);router.get("/comm/user/callback").blockingHandler(context -> {HttpServerRequest req = context.request();AuthCallback callback = new AuthCallback();callback.setCode(req.getParam("code"););callback.setState(req.getParam("state"));AuthRequest authRequest = createAuthRequest();AuthResponse auRes = authRequest.login(callback);HttpServerResponse res = context.response();res.putHeader("Content-Type","text/json;charset=utf-8");res.end(JSONUtil.toJsonStr(auRes));});router.get("/login").blockingHandler(context -> {String url = createAuthRequest().authorize(AuthStateUtils.createState());HttpServerResponse res = context.response();res.putHeader("location",url);res.setStatusCode(302);res.end();});HttpServer httpServer = vertx.createHttpServer();httpServer.requestHandler(router::accept);httpServer.listen(8886);}
}

代码很好理解,主要可以分为以下几个步骤

  1. 构建一个QQ登录的工具类,监听两个路由
  2. 当我们访问/login的时候,生成登录地址,并且重定向到登录地址
  3. 当我们登录之后,系统跳往回调地址,即/comm/user/callback,在这里我们获取参数codestate封装成AuthCallback对象,执行登录方法
  4. 登录成功后会返回用户信息,格式如下:

需要注意的是:创建AuthQqRequest对象的时候,必须是单例,也就是说,必须保证生成登录地址的对象的执行登录方法的对象是同一个。

使用最简单的方法实现QQ登录相关推荐

  1. 用最简单的方法实现QQ魔法表情效果!

    效果图. -------------------------------------------------------------------------------------------- 最先 ...

  2. 织梦会员登录PHP,DEDECMS会员登录后跳转首页的简单实现方法

    DEDECMS会员登录后跳转首页的简单实现方法 互联网   发布时间:2009-06-06 15:06:24   作者:jb51   我要评论 关键字描述:简单 实现 方法 首页 会员 登录 & ...

  3. Django项目实战----接入第三方QQ登录绑定用户

    需求 用户点击QQ登录接入第三方登录 不需要输入本网站账户就可登录 如果没有绑定过就注册一个 图解 逻辑流程 用户点击QQ登录按钮,后端使用QQLoginTool第三方库来生成一个 QAuthQQ 对 ...

  4. linux用户注销的方法,linux退出登录_Linux下注销登录用户的方法

    摘要 腾兴网为您分享:Linux下注销登录用户的方法,智慧大学,悦作业,优化大师,学堂里等软件知识,以及货拉拉抢单,一呼万应,刺客信条奥德赛3dm,特价二手车,瓶子树,安全生产管理软件,上古卷轴5站姿 ...

  5. 易语言新手入门教程第四课 - 简单模仿QQ登录窗口

    简单模仿QQ登录窗口 1.编辑框 2.如果() 3.载入() 4.销毁() 作业: 看完教程,然后自己用易语言写一个一样的程序 易语言如果命令的说明: 调用格式: 〈无返回值〉 如果 (逻辑型 条件) ...

  6. java实现简单QQ登录界面验证_QQ登录界面实现

    正版现货ui设计必修课sketch ue光盘 191.8元 包邮 (需用券) 去购买 > Java实现QQ登录界面 QQ登录界面也是界面的一种,在实现界面时我们需要一些界面开发包,如: pack ...

  7. mysql 验证码过期时间_简单的行为控制管理方法,自动登录,session定时验证码过期...

    public functionindex() {if(IS_POST) {//尝试登陆次数增加 behavior_function(__FUNCTION__, __CLASS__,1);}else{$ ...

  8. 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】

    说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin --------- ...

  9. html+css 制作简单QQ登录页面

    HTML+css制作简单QQ登录页面 这是效果图 这是HTML源码 <!DOCTYPE html> <html lang="zh"><head> ...

最新文章

  1. 近似求PI(15 分)
  2. 合并果子_tyvj1066_vijos1097_codevs1063_贪心+堆
  3. 面试官问,为什么建议MySQL列属性尽量用 NOT NULL ?
  4. matlab 子图title的位置_matlab 画图基本介绍
  5. git linux 部署网站,centos 搭建git自动部署web应用
  6. 数据结构迷宫代码_数据结构课程设计——迷宫求解(二)
  7. 1092 最好吃的月饼 (20 point(s))- PAT乙级真题
  8. 分段式多级离心泵_D型卧式多级泵结构组成及工作原理
  9. 段描述符和段选择符解析
  10. 外企面试官最爱提的十个问题
  11. 优秀程序员的八个好习惯
  12. 前端基础——html5新增标签
  13. 试题 算法训练 调和数列问题---蓝桥杯
  14. 某机主存容量为4Nx16位,且存储字长等于指令字长,若该机指令系统可完成108种操作,操作码位数固定,且具有直接、间接、变址、基址、相对、立即等六种寻址方式
  15. 基于Web SCADA平台构建数字化车间的MES系统
  16. java的nullpoint_Java中避免NullPointerException的方法总结
  17. python 需求分析
  18. 思岚科技—SLAMTEC将自家研发技术应用到更多行业中
  19. Java 丢手绢游戏 求和_java入门小程序—17人游戏(丢手绢问题)
  20. C语言:输出整数的质因子

热门文章

  1. Java基础巩固Day2作业
  2. 会声会影X5捕获视频失败
  3. 主链增幅最高飚至152%,主流币却惊现回落;以太坊发币速度持续放缓
  4. 牛客OR36 链表的回文结构
  5. matlab中图像压缩
  6. cgroup使用举例和linux内核源码详解
  7. 处理接口幂等性的两种常见方案
  8. 枚举类与注解(复习)
  9. 抗混叠滤波的Matlab解释
  10. PAT-A1010解题报告