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

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

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

 

 node.jsWeb实时消息后台服务器推送技术

 

为什么要有这两个条件呢?那是因为微信在确认是否允许登录到网页版的时候,微信需要提取当前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,大家可以去看看效果.

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

转载于:https://www.cnblogs.com/EmmaGong/p/6007763.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/457717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

喇叭正反相位测试音频_FIR滤波器能给音频扩声带来怎样的帮助?

随着数字音频的快速发展,近些年在音频扩声领域,经常能听到音频技术人士讨论FIR数字滤波器,有些说法和厂家的宣传难免有些过于神化,有些厂家的技术工程师竟然宣称,自己的FIR滤波器能把每只扬声器或者整组扩声系统的相位…

使用c语言easy—x库实现实时钟表

先了解一下easy-x库 EasyX 是针对 C 的图形库&#xff0c;可以帮助 C语言初学者快速上手图形和游戏编程。 可以通过官网下载&#xff0c;文件很小&#xff0c; easy-x的支持头文件是 #include<graphics.h>下载之后双击打开会有所有easy-x函数的语法和作用&#xff0c;中…

java基础—方法重载(overload)

一、方法的重载 方法名一样&#xff0c;但参数不一样&#xff0c;这就是重载(overload)。 所谓的参数不一样&#xff0c;主要有两点&#xff1a;第一是参数的个数不一样&#xff0c;第二是参数的类型不一样。只要这两方面有其中的一方面不一样就可以构成方法的重载了。 1 packa…

word 编辑域中的汉字_word中插入的cad对象无法双击编辑问题解决记录

昨日&#xff0c;安装了天正插件5.0后&#xff0c;插入word中的cad图无法编辑了&#xff0c;弹出提示的大意是检查是否安装了cad或者是否关闭了CAD中所有的弹窗。在此之前&#xff0c;计算机装了office2010和cad2014及cad2018&#xff0c;office自动关联cad2018&#xff0c;即使…

php实现注册登陆验证

欢迎界面很简单&#xff0c;直接放上代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head&…

iOS touch事件单击双击区分响应

如果您的 iPhone 应用里有个 view&#xff0c;既有单击操作又有双击操作。用户双击 view 时&#xff0c;总是先执行一遍单击的操作再执行双击的操作。所以直接判断时就会发现不能直接进入双击操作。下面是区分 touch 事件是单击还是双击的方法 -(void)singleTap{ NSLog(&quo…

搭建高可用的redis集群,避免standalone模式带给你的苦难

现在项目上用redis的话&#xff0c;很少说不用集群的情况&#xff0c;毕竟如果生产上只有一台redis会有极大的风险&#xff0c;比如机器挂掉&#xff0c;或者内存爆掉&#xff0c;就比如我们生产环境 曾今也遭遇到这种情况&#xff0c;导致redis内存不够挂掉的情况&#xff0c;…

python计算a的平方加b的平方_NumPy计算范数2的平方

老实说&#xff0c;没有比np.inner或np.dot更快的了。如果你觉得中间变量很烦人&#xff0c;你可以创建一个lambda函数&#xff1a;sqeuclidean lambda x: np.inner(x, x)np.inner和np.dot利用BLAS例程&#xff0c;几乎肯定比标准的元素乘法加和快。In [1]: %%timeit -n 1 -r …

php连接MySQL

先说一下我踩了三天的坑 我在这之前用mysql申请了一个数据库&#xff0c;然后用php连接一直连接不上&#xff0c;试了许多办法&#xff0c;都不行 下载MySQL时显示3306端口被占用&#xff0c;所以选了3307 一直报错&#xff0c;三天后&#xff0c;终于知道了&#xff0c;你用的…

SVG动画

动画原理 SVG动画&#xff0c;就是元素的属性值关于时间的变化。 如下图来说&#xff0c;元素的某个属性值的起始值&#xff08;from&#xff09;到结束值&#xff08;to&#xff09;在一个时间段&#xff08;duration&#xff09;根据时间函数&#xff08;timing-function&…

bootstrap弹出的模态框水平垂直居中的实现

学习javascript从入门到放弃&#xff01;&#xff0c;这是第一篇随笔&#xff0c;经验不足&#xff0c;如有不当之处&#xff0c;还望指出。好了废话不多说直接切入正题吧 1.bootstrap默认的model写法&#xff1a; //触发模态框的button <button data-toggle"modal&quo…

python开发实践教程_Python开发实践教程

前言第一章 通过求三角形面积步入Python程序世界 案例1-1 求三角形面积 导读 知识梳理与扩展 小结 练习一第二章 常用运算、使用自定义函数 案例2-1 用函数的方法计算三角形面积 导读 案例2-2 开发一个求三角形面积的工具包 知识梳理与扩展 小结 练习二第三章 分支、循环和列表…

正则表达式 PHP

正则表达式的常用函数&#xff1a; 先写一个函数show&#xff0c;用来输出数组&#xff0c;使代码看起来方便&#xff0c;且把经常重复用到的量放在前面 function show($varnull) {if(empty($var))//检测变量是否为空{echo null;}elseif (is_array($var)||is_object($var))//…

iis发布网站怎么支持.json文件

转载于:https://www.cnblogs.com/daizhipeng/p/5622839.html

PHP Cookie和Session

cookie cookle常用来识别用户&#xff0c;可以理解为浏览器留下的一种文件&#xff0c;cookie可以分为会话cookie和硬盘cookie两种&#xff0c;会话cookie生命周期短&#xff0c;浏览器关闭即销毁&#xff0c;硬盘cookie生命周期由开发者设定&#xff0c;可长可短 1.创建cook…

浏览器渲染机制

1. 明白浏览器渲染的目的 可访问性&#xff08;Accessability&#xff09;、加载性能和重构灵活性一直是前端工程师们关心的主题。 其中加载性能与浏览器的渲染机制深深挂钩&#xff0c;弄明白浏览器背后的渲染机制&#xff0c;才能在日常的前端的开发中明白如何进行性能优化。…

java中List Set Map使用

Testpublic void run(){ArrayList<String> list new ArrayList<String>();list.add( "美女");list.add( "帅哥");list.add( "芙蓉姐姐" );for (int i 0; i < list.size(); i) {String strlist.get(i);System. out.println(str);…

python免费开源工具推荐_年薪200万的程序员,推荐这10大Python免费开源工具!

原标题&#xff1a;年薪200万的程序员&#xff0c;推荐这10大Python免费开源工具&#xff01;毫无疑问&#xff0c;Python是最流行的语言之一&#xff0c;其成功的原因之一是它为科学计算提供了广泛的报道。 在这里&#xff0c;我们仔细研究用于机器学习和数据科学的十大Python…

通过Yeoman快速搭建AngularJS webapp应用的实践

这里主要记录关于使用yeoman快速构建angluarJS的前端应用的实践&#xff1a; 安装node、yeoman等过程略去 1、首页我们可以在公共的脚手架中找到自己想要的脚手架&#xff0c;官方脚手架库的地址 Yeoman generators: http://yeoman.io/generators/ 这里我们选择官方团队出的ang…

[Objective-C]编程艺术 笔记整理

看了《禅与 Objective-C 编程艺术》&#xff0c;发现不少平时不注意的或注意但没有系统总结的东西&#xff0c;特此记录一下。 这次没有整理完&#xff0c;后续更新会结合手里的一些其他资料整理。 新博客wossoneri.com传送门 完整的介绍看这两个链接Google开源项目风格指南禅与…