手机扫码登录实现原理「建议收藏」

扫码登录原理最近接到一个需求,要求我用手机扫码实现用户登录,这是近几年比较流行的登录方式。这样确实是实现用户体验至上,操作简单,方便实用。拿到需求之后,我与后端大哥商量后,敲定了具体的实施方案。其实重要的还是要弄懂他实现的原理。需求:用户至上的体验效果,手机扫码同步登录状态很多企业在开发自己app的同时会推出网页版,为了登录更方便、更安全。企业会选用手机扫一扫,实现用户登录。神奇的是。为什么…

大家好,又见面了,我是你们的朋友全栈君。

最近接到一个需求,要求用手机扫码实现用户登录,这是近几年比较流行的登录方式。这样确实是实现用户体验至上,操作简单,方便实用。拿到需求之后,我与后端大哥商量后,敲定了具体的实施方案。其实重要的还是要弄懂他实现的原理。

需求:用户至上的体验效果,手机扫码同步登录状态

很多企业在开发自己app的同时会推出网页版,为了登录操作更方便、更安全。企业会选用手机扫一扫,实现用户登录。神奇的是。为什么网页只显示一个二维码就可以实现用户登录?这个二维码是固定的吗?怎么给用户分配的id?怎么能把手机上的登录信息同步到网页上?
例如:淘宝、京东这些,如何做到扫一扫授权就能登录成功,并实现用户信息同步的。

在这里插入图片描述
下面我们介绍一下手机扫码登录的实现原理,用到的服务器要有2台,手机端服务器和网页端服务器不是同一台服务器。

网页端与服务器

用户打开一个网站的登录页面==>此时浏览器会向服务器发送一个请求,这个请求用来获取登录的二维码==>服务器收到请求后,随机生成一个uuid,并将这个uuid作为key值存储在redis中,同时设置一个过期时间,过期后,用户的界面就会显示“需要重新获取二维码”。同时也将这个key值与本公司的验证字符串绑定在一起,然后将这些生成一个随机的二维码(网上有很多二维码生成器的接口和源码,可以直接调用)==>将二维码和用户的uuid一起返回给浏览器。

前端开发获取到这个这个二维码和uuid==>每隔一秒向浏览器发送一次登录是否成功的请求,请求中携带有uuid作为当前页面的标识符。

这里有一个问题:服务器只存了一个随机的uuid在redis中,那么用户的id的信息怎么会显示出来。其实这个用户的id信息是由手机服务器存在redis中的。这也就为什么要俩台服务器的原因。

手机端与服务器

刚刚我们说了,浏览拿到二维码并且展示在页面上。这个时候前端可以给定一个提示信息。请用手机扫一扫登录。用户拿到手机扫描二维码,就可以得到一个验证信息和一个uuid(扫描二维码获取字符串的这个案例网上也能找到很多),由于手机端已经进行过登录操作,后端也记录了用户信息,所以在访问手机端服务器的时候,参数中已经携带用户的token,手机端服务器就可以解析用户的uesrid(注意:这里从token中取值而不是手机端直接传userid是为了安全,直接传userid可能会被截获和修改,token是加密的,被修改的风险会小很多)。手机端将解析到的数据和用户token一起作为参数,向服务器发送验证登录请求(这里的服务器是手机服务器,手机端的服务器跟网页端服务器不是同一台服务器)。服务器收到请求后,首先对比参数中的验证信息,确定是否为用户登录请求接口。如果是,返回一个确认信息给手机端。

手机端收到返回后,将登录确认框显示给用户(防止用户误操作,同时使登录更加人性化)。用户在手机上确认是进行的登录操作后,手机再次发送请求。服务器拿到uuId和userId后,将用户的userid作为value值存入redis中以uuid作为key的键值对中。

登录成功

然后,浏览器再次发送请求的时候,浏览器端的服务器就可以得到一个用户Id,并调用登录的方法,生成一个浏览器端的token,然后浏览器再次发送请求的时候,将用户信息返回给浏览器,登录成功。这里存储用户id而不是直接存储用户信息是因为,手机端的用户信息,不一定是和浏览器端的用户信息完全一致。

在这里插入图片描述
如果你是前端小可爱,那么只需发送请求,接收消息就可以。重要的逻辑部分和解析工作还是由后端大佬们挑大梁,希望可以帮助到大家。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125618.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Cookie中的httponly的属性和作用

    Cookie中的httponly的属性和作用1.什么是HttpOnly?如果cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,窃取cookie内容,这样就增加了cookie的安全性,即便是这样,也不要将重要信息存入cookie。XSS全称CrossSiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。其…

    2022年6月29日
    26
  • Java网络爬虫(七)–实现定时爬取与IP代理池

    Java网络爬虫(七)–实现定时爬取与IP代理池注:对代码及思路进行了改进—Java网络爬虫(十一)–重构定时爬取以及IP代理池(多线程+Redis+代码优化)定点爬取当我们需要对金融行业的股票信息进行爬取的时候,由于股票的价格是一直在变化的,我们不可能手动的去每天定时定点的运行程序,这个时候我们就需要实现定点爬取了,我们引入第三方库quartz的使用:packagetimeutils;importorg.quart

    2022年5月5日
    159
  • Python和Java的区别

    Python和Java的区别区别:1.Python比Java简单,学习成本低,开发效率高2.Java运行效率高于Python,尤其是纯Python开发的程序,效率低3.Java相关资料多,尤其是中文资料6.Java偏向于商业开

    2022年7月6日
    24
  • 激活成功教程芝诺悖论之阿基里斯追乌龟

    激活成功教程芝诺悖论之阿基里斯追乌龟版权所有。所有权利保留。欢迎转载,转载时请注明出处:阿基里斯是古希腊神话中善跑的英雄。在他和乌龟的竞赛中,他速度v1,位置坐标0;乌龟速度v2,位置坐标s。已知v1>v2。他在后面追,但他不可能追上乌龟。因为在竞赛中,追者首先必须到达被追者的出发点,当阿基里斯追到s时,乌龟已经又向前爬了s/v1*v2,位置s+s/v1*v2。于是,一个新的起点产生了;阿基里斯必须继续追,而当他追到乌龟爬的

    2022年6月23日
    33
  • python安装不了whl文件_Python安装whl文件过程图解

    python安装不了whl文件_Python安装whl文件过程图解Python安装whl文件过程图解这篇文章主要介绍了Python安装whl文件过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下在命令指示符下(cmd)的Python3安装命令为:pip3install文件名.whl安装出错:matplotlib-2.0.0-cp34-cp34m-win_amd64.whlisnotasuppor…

    2022年5月29日
    68
  • 计算机启动显示安装程序正在启动服务,安装程序正在启动服务需要多久

    计算机启动显示安装程序正在启动服务,安装程序正在启动服务需要多久大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。安装程序正在启动服务需要多久,这个主要看软件大小,安装完成就会自动运行的,要是系统不断的提示,这个就不一定了,时间可能会很久的,需要耐心等待。程序,香港和台湾对英文procedure的中文翻译,编程语言中的procedure在大陆翻译为“过程”,在港台和其他领域则翻译为“程序”。在大陆于计算机科学、电脑工程、电子工程、电机工程、机…

    2022年6月29日
    72

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号