最近在做一个扫码登录功能,为此我还在网上搜了一下关于微信的扫描登录的实现方式。当这个功能完成了后,我决定将整个实现思路整理出来,方便自己以后查看也方便其他有类似需求的程序猿些。
要实现扫码登录我们需要解决两个问题:
1.  在没有输入用户名及密码的情况下,如何解决权限安全问题?换句话讲,如何让服务器知道扫码二维码的客户端是一个合法的用户?
2.  服务器根据用户在客户端的选择如何实时在网页上作出相应的响应?

首先我们先理一下微信的实现思路,来方便我们理解解决这一难题的思路方向。微信登录的二维码实际上是将一个URL转换成二维码的形式,而通过微信客户端扫码后,无非就是打开了这个url, 我捕捉到的微信二维码的url为https://login.weixin.qq.com/l/YdmTu30I5A== ,这个url里的YdmTu30I5A==代表的是本次会话的唯一ID, 这个有点儿类似浏览器里的session id,通过这个ID,微信就能定向将确认结果反馈到网页上。使用微信二维码登录功能,需要有两个前提:一是客户端上需要安装微信app。二是用户需要登录到到微信app。https://wx.qq.com/

C(++) Websocket消息推送

 

为什么要有这两个条件呢?那是因为微信在确认是否允许登录到网页版的时候,微信需要提取当前app的登录信息并将上面的session ID一并发给服务器,这样服务器收到了登录信息和sessionID后就可以确认两件事:一是用来确认登录的客户端的用户是验证过的;二是通过sessionID服务器知道将反馈结果推送到哪个网页。

所以针对第一点,我们的关键在于,在扫描前要确保用户是已经被验证过且合法的用户(验证方式可以是用户名+密码,也可以是一个secure key),在选择是否登录时将这个结果一并推送到服务器端,就好了。如果用户没有验证是否合法,可以像微信的处理方式一样直接告诉用户二维码不可识别或提示请先登录到app。

有了身份验证,那么现在就解决第二个问题,如何将反馈结果实时地显示在网页上呢?有朋友可能会说,客户端这边很简单发一个请求到后台就好了,而网页上用ajax定时发送到服务器端看是否有反馈。我不赞成这种做法,因为ajax轮询方式十分消耗客户端和服务器端资源!这里涉及到另一个技术-web实时推送技术,使用推送技术可以节约服务器端和客户端的资源,可以稳定地推送和接收任何消息。我在实现的过程中我采用了第三方推送服务-GoEasy推送,用它是实现非常简单,我们项目里的其他功能也用到了GoEasy web实时推送服务,所以在此我直接就用的GoEasy推送来将登录反馈结果推送到服务器。我的实现步骤非常简单,将传送的session ID作为客户端与网页端的通信channel,网页端订阅用session ID作为值得channel,客户端将验证结果和session ID发送到服务器端,服务器端可以通过这个channel主动将结果推送给网页版!如果客户端也需要做相应的反馈的话,那么客户端也只需要订阅这个channel,然后服务器端会同时将结果推送给网页版和客户端,收到消息后,就可以根据需求在goeasy的回调函数里做你想做的事情了。关于goeasy推送的使用,大家可以参考这篇博客: http://www.cnblogs.com/jishaochengduo/articles/5552645.html,另外GoEasy推送官网上也有一个demo:GoEasy二维码扫码登录demo,大家可以去看看效果.

希望对大家有帮助,如有理解错误的地方,还请大家斧正。

转载于:https://blog.51cto.com/12271250/1879571

C(++) Websocket实现扫码二维码登录---GoEasy相关推荐

  1. vue websocket 公众号扫描二维码登录PC端

    首先使用的是websocket进行消息的传递,当我们在pc端请求到二维码图片后,打开微信扫一扫,扫描二维码后,就可以在websocket里接收到扫描消息,然后进行自己的业务逻辑处理,具体代码如下: w ...

  2. JAVA 实现扫码二维码登录

    最近在做一个扫码登录功能,为此我还在网上搜了一下关于微信的扫描登录的实现方式.当这个功能完成了后,我决定将整个实现思路整理出来,方便自己以后查看也方便其他有类似需求的程序猿些. 要实现扫码登录我们需要 ...

  3. 用STM32实现:摄像头扫到二维码后提取二维码中的信息分别放到数组中

    摄像头扫到二维码后提取二维码中的信息分别放到数组中 把想要的信息编辑好放到二维码中(网上有好多在线生成二维码的工具) /** *作者:魏波 *时间:2017.6.6 * **/char name[6] ...

  4. node.js 实现扫码二维码登录

    最近在做一个扫码登录功能,为此我还在网上搜了一下关于微信的扫描登录的实现方式.当这个功能完成了后,我决定将整个实现思路整理出来,方便自己以后查看也方便其他有类似需求的程序猿些. 要实现扫码登录我们需要 ...

  5. uni-app微信小程序扫普通二维码分享小程序

    这里需要扫普通二维码分享的话就需要先产生二维码了 文档:https://github.com/yingye/weapp-qrcode 1.绘制二维码 我这里使用的是资源是weapp.qrcode.es ...

  6. h5 实现扫码二维码及条形码(js多种实现方式)

    方式一. 只识别二维码 实现方式一 jsQR 个人预览页面网址只扫码二维码 GitHub jsQR inde.html <!DOCTYPE html> <html><he ...

  7. 苹果手机QQ扫正常二维码404

    问题记录:苹果手机QQ扫正常二维码404,其他手机及应用扫描正常 二维码信息中包含中文,将中文转码即可 c# http的url编解码类 System.Web.HttpUtility.UrlEncode ...

  8. android扫码二维码识别二维码

    1. 快速集成扫码二维码,识别二维码功能.经过加工处理优化的,直接返回扫码结果字符串和图片的bitmap数据. 直接上代码: package com.xinxinchelian.myscanzxing ...

  9. C++/QT生成二维码和扫瞄二维码

    C++生成二维码和扫瞄二维码 一. 创建工程项目 二 .QRCODE库 三. 添加生成二维码库 四. 生成二维码和复制二维码实现 五. 添加扫码二维码库 六. 扫码二维码代码实现 七. 测试 八. 打 ...

最新文章

  1. 通过ArcCatalog连接ArcGIS Server的种种问题
  2. 状态模式在领域驱动设计中的使用
  3. 缓存模式以及缓存的数据一致性
  4. JS、CSS中的相对路径
  5. 实战SSM_O2O商铺_31【商品】商品添加之View层的实现
  6. 西瓜书+实战+吴恩达机器学习(二三)EM算法和变分推断
  7. ui自动化测试框架_自动化测试框架--Instrumentation
  8. 解决IDEA创建多模块项目找不到创建class类的问题
  9. 黑莓:一家把未来押宝无人驾驶的老牌手机厂商
  10. *第三周*数据结构实践项目一【顺序表的基本运算】
  11. 超强功能file_put_contents()函数(集成了fopen、fwrite、fclose)
  12. 关于微博api返回内容不全内容
  13. Linux Ubuntu 安装Tomcat 7,亲测有效
  14. 通过DSP采集AD7606的转换结果
  15. linux下载flink安装包
  16. HTTP 405 Method Not Allowed问题的解决
  17. 计算机网络的核心概念
  18. win10 hao123劫持html文件,Win10 edge浏览器主页被hao123劫持怎么解决?
  19. CASAIM自动化精密尺寸测量设备全尺寸检测铸件自动化检测铸件
  20. 智慧教室解决方案-最新全套文件

热门文章

  1. 医学生如何选专业选科室?全网最全最详细分析
  2. MX130+python3.7.6+CUDA 10.0+CUDNN 7.4.2+TensorFlow-gpu安装
  3. linux命令行终端全局反色
  4. c语言 char memcpy,在C中使用memcpy复制无符号字符数组
  5. 如何在word写小论文在正文分栏后第一页左下角添加 项目 基金 作者简介 (添加通栏脚注)
  6. 神经网络 | 受限波尔兹曼机(附源代码)
  7. 华硕p8b75v主板说明书_我们测了22块主板 发现128GB内存不是想上就上
  8. html5和前端精要(2)-架构与基础(2)
  9. 【学术相关】专家:硕博研究生阶段还是要发SCI,取消了学生就不干活了
  10. 【学术相关】读研究生,从学会「拒绝」导师开始