最近在做一个扫码登录功能,为此我还在网上搜了一下关于微信的扫描登录的实现方式。当这个功能完成了后,我决定将整个实现思路整理出来,方便自己以后查看也方便其他有类似需求的程序猿些。
要实现扫码登录我们需要解决两个问题:
1. 在没有输入用户名及密码的情况下,如何解决权限安全问题?换句话讲,如何让服务器知道扫码二维码的客户端是一个合法的用户?
2. 服务器根据用户在客户端的选择如何实时在网页上作出相应的响应?
首先我们先理一下微信的实现思路,来方便我们理解解决这一难题的思路方向。微信登录的二维码实际上是将一个URL转换成二维码的形式,而通过微信客户端扫码后,无非就是打开了这个url, 我捕捉到的微信二维码的url为https://login.weixin.qq.com/l/YdmTu30I5A== ,这个url里的YdmTu30I5A==代表的是本次会话的唯一ID, 这个有点儿类似浏览器里的session id,通过这个ID,微信就能定向将确认结果反馈到网页上。使用微信二维码登录功能,需要有两个前提:一是客户端上需要安装微信app。二是用户需要登录到到微信app。https://wx.qq.com/
为什么要有这两个条件呢?那是因为微信在确认是否允许登录到网页版的时候,微信需要提取当前app的登录信息并将上面的session ID一并发给服务器,这样服务器收到了登录信息和sessionID后就可以确认两件事:一是用来确认登录的客户端的用户是验证过的;二是通过session ID服务器知道将反馈结果推送到哪个网页。
所以针对第一点,我们的关键在于,在扫描前要确保用户是已经被验证过且合法的用户(验证方式可以是用户名+密码,也可以是一个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,大家可以去看看效果.
希望对大家有帮助,如有理解错误的地方,还请大家斧正。
相关推荐
+ 2017-03-30 实现二维码扫码登陆 ## 运行环境 Python 2.7 ## 第三方库 - [Requests][1]: 简单好用,功能强大的Http请求库 - [beautifulsoup4][2]: HTML文档格式化及便签选择器 ## 环境配置 ``` Python pip ...
首先,我们要理解二维码(Quick Response Code)是一种二维条形码,可以存储大量的信息,如文本、URL、联系人信息等。OV2640是一款常见的CMOS图像传感器,用于捕获数字图像,常用于摄像头模块。在本项目中,OV2640...
本文将深入探讨如何在C/C++环境中,借助OpenCV库和Z-Bar库在VS2013平台上实现二维码识别程序。 首先,我们需要理解OpenCV(Open Source Computer Vision Library)是一个强大的计算机视觉库,提供了图像处理和...
总的来说,ZBar二维码扫码库凭借其高效的C++实现、跨平台特性以及优秀的扫码速度,成为开发者在构建二维码相关应用时的重要选择。通过理解和熟练运用这个库,开发者可以快速构建出功能完善的扫码功能,提升应用的...
【标题】"QRCode.zip_openvc一扫码_qrcode开源库_二维码 opencv_二维码 zbar_二维码opencv" 提供了一个关于使用OpenCV和ZBar库进行二维码扫描的项目实例。这个压缩包包含了一个名为"QRCode"的解决方案文件(QRCode....
6. **扫码功能**:用户扫码点餐,意味着项目中可能包含了二维码扫描的实现。这通常需要借助JavaScript库(如Quagga.js或ZXing.js)或者调用移动端设备的原生API来完成。用户扫描二维码后,可以快速获取菜品信息并...
在C语言中实现二维码扫码功能,需要深入理解二维码的编码原理和解码算法,并且需要利用图像处理库来读取和解析二维码图像。本资源提供的是一个名为"zbar-0.10"的压缩包,它可能包含了一个用C语言编写的二维码解码库...
基于C和C++的二维码扫码出入库管理系统+sln解决方案.zip基于C和C++的二维码扫码出入库管理系统+sln解决方案.zip基于C和C++的二维码扫码出入库管理系统+sln解决方案.zip基于C和C++的二维码扫码出入库管理系统+sln解决...
这个"ZXing扫码生成二维码Demo"项目很显然是一个基于ZXing库的示例应用,用于展示如何在Android或者iOS等平台上实现扫描二维码和生成二维码的功能。下面,我们将深入探讨ZXing库以及如何使用它来开发二维码相关的...
扫码枪作为一种便捷的数据输入设备,能够快速读取商品条形码或二维码信息,并将其转化为可处理的文本数据。本文将深入探讨如何在Java后台程序中接收并处理扫码枪的数据。 首先,了解扫码枪的工作原理是必要的。扫码...
本篇将详细讲解如何使用Delphi XE10.2.3配合Zxing 3.3.3库来开发二维码扫码功能。 首先,Zxing(又名ZXing,意为“zebra crossing”,斑马线)是一个开源的、多格式的一维/二维条码图像处理库,支持多种编程语言,...
超简单集成华为HMS Scankit扫码服务实现扫一扫二维码前言官网的Demo和Sample代码体验1 开发前准备1.1 android studio 安装1.2 在项目级gradle里添加华为maven仓1.3 在应用级的build.gradle里面加上SDK依赖1.4 加一下...
5. **PhoneGap的 BarcodeScanner插件**:PhoneGap有一个名为BarcodeScanner的插件,用于实现二维码和条形码的扫描功能。开发者通过调用这个插件的API,可以启动设备的摄像头,扫描并解析二维码,获取其中的信息。 6...
总的来说,"二维码/条形码扫码库,效率较高"这一主题涉及到的关键知识点包括: 1. 二维码和条形码的编码原理及应用 2. zxing库的功能和特点,包括其跨平台和多格式支持 3. zbar库的专长,尤其是高速二维码解码 4. ...
本资源提供的是一个基于STM32的二维码识别解决方案,包括源码和二维码解码库lib,这对于需要在STM32平台上实现二维码读取功能的开发者来说非常有用。 二维码(Quick Response Code)是一种二维条形码,能存储大量...
基于C和C++实现的二维码扫码出入库管理系统+源代码+文档说明+sln解决方案 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96...
期末课程设计-基于C语言和C++实现的二维码扫码出入库管理系统源代码.zip个人大三学期的期末大作业、经导师指导并认可通过的高分大作业设计项目,评审分98.5分。主要针对计算机相关专业的正在做大作业的学生和需要...
在本文中,我们将深入探讨如何使用JavaScript来获取扫码枪扫描得到的条形码信息,并提供一个实际的实现示例。这个过程涉及到监听键盘事件、识别扫码枪输入的特征以及处理条形码数据。 首先,我们需要了解扫码枪是...
二维码(Quick Response Code)是一种二维条形码,能存储大量的信息,如文本、网址、联系信息等。在STM32上实现二维码识别,通常涉及到以下几个关键技术点: 1. 图像采集:首先,需要通过摄像头或其他图像传感器...
这里,我们将深入探讨这两个关键组件以及它们如何协同工作来实现扫码枪的数据获取。 首先,STM32F107VC是意法半导体(STMicroelectronics)推出的32位微控制器,具备高速处理能力,内置512KB闪存和64KB SRAM,丰富...