使用最简单的方法实现QQ登录
前期准备
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);}
}
代码很好理解,主要可以分为以下几个步骤
- 构建一个QQ登录的工具类,监听两个路由
- 当我们访问
/login
的时候,生成登录地址,并且重定向到登录地址 - 当我们登录之后,系统跳往回调地址,即
/comm/user/callback
,在这里我们获取参数code
和state
封装成AuthCallback
对象,执行登录方法 - 登录成功后会返回用户信息,格式如下:
需要注意的是:创建AuthQqRequest对象的时候,必须是单例,也就是说,必须保证生成登录地址的对象的执行登录方法的对象是同一个。
使用最简单的方法实现QQ登录相关推荐
- 用最简单的方法实现QQ魔法表情效果!
效果图. -------------------------------------------------------------------------------------------- 最先 ...
- 织梦会员登录PHP,DEDECMS会员登录后跳转首页的简单实现方法
DEDECMS会员登录后跳转首页的简单实现方法 互联网 发布时间:2009-06-06 15:06:24 作者:jb51 我要评论 关键字描述:简单 实现 方法 首页 会员 登录 & ...
- Django项目实战----接入第三方QQ登录绑定用户
需求 用户点击QQ登录接入第三方登录 不需要输入本网站账户就可登录 如果没有绑定过就注册一个 图解 逻辑流程 用户点击QQ登录按钮,后端使用QQLoginTool第三方库来生成一个 QAuthQQ 对 ...
- linux用户注销的方法,linux退出登录_Linux下注销登录用户的方法
摘要 腾兴网为您分享:Linux下注销登录用户的方法,智慧大学,悦作业,优化大师,学堂里等软件知识,以及货拉拉抢单,一呼万应,刺客信条奥德赛3dm,特价二手车,瓶子树,安全生产管理软件,上古卷轴5站姿 ...
- 易语言新手入门教程第四课 - 简单模仿QQ登录窗口
简单模仿QQ登录窗口 1.编辑框 2.如果() 3.载入() 4.销毁() 作业: 看完教程,然后自己用易语言写一个一样的程序 易语言如果命令的说明: 调用格式: 〈无返回值〉 如果 (逻辑型 条件) ...
- java实现简单QQ登录界面验证_QQ登录界面实现
正版现货ui设计必修课sketch ue光盘 191.8元 包邮 (需用券) 去购买 > Java实现QQ登录界面 QQ登录界面也是界面的一种,在实现界面时我们需要一些界面开发包,如: pack ...
- mysql 验证码过期时间_简单的行为控制管理方法,自动登录,session定时验证码过期...
public functionindex() {if(IS_POST) {//尝试登陆次数增加 behavior_function(__FUNCTION__, __CLASS__,1);}else{$ ...
- 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin --------- ...
- html+css 制作简单QQ登录页面
HTML+css制作简单QQ登录页面 这是效果图 这是HTML源码 <!DOCTYPE html> <html lang="zh"><head> ...
最新文章
- 近似求PI(15 分)
- 合并果子_tyvj1066_vijos1097_codevs1063_贪心+堆
- 面试官问,为什么建议MySQL列属性尽量用 NOT NULL ?
- matlab 子图title的位置_matlab 画图基本介绍
- git linux 部署网站,centos 搭建git自动部署web应用
- 数据结构迷宫代码_数据结构课程设计——迷宫求解(二)
- 1092 最好吃的月饼 (20 point(s))- PAT乙级真题
- 分段式多级离心泵_D型卧式多级泵结构组成及工作原理
- 段描述符和段选择符解析
- 外企面试官最爱提的十个问题
- 优秀程序员的八个好习惯
- 前端基础——html5新增标签
- 试题 算法训练 调和数列问题---蓝桥杯
- 某机主存容量为4Nx16位,且存储字长等于指令字长,若该机指令系统可完成108种操作,操作码位数固定,且具有直接、间接、变址、基址、相对、立即等六种寻址方式
- 基于Web SCADA平台构建数字化车间的MES系统
- java的nullpoint_Java中避免NullPointerException的方法总结
- python 需求分析
- 思岚科技—SLAMTEC将自家研发技术应用到更多行业中
- Java 丢手绢游戏 求和_java入门小程序—17人游戏(丢手绢问题)
- C语言:输出整数的质因子