扫描二维码登陆思路

前言:最近想在个人我的网站上面加上一个扫二维码登陆后台的一个功能,以前写过websocket在线聊天,知道扫码成功以后,须要用到websocket来实现pc同步登陆,百度了一下扫码登陆思路,很无赖,都只是随便的谈了一下大概的思路,看完以后仍是一脸萌逼,最后仍是决定本身去研究一下QQ的扫码登陆如何实现的,分享一下我是如何实现扫码登陆。。html

思路这东西还真得靠本身熬呀!web

我是研究的qq邮箱扫码登陆,因此后面的都以qq邮箱为例,先看一下这张图:数据库

结合以前百度的扫码登陆思路,这个appid应该就是客户端的id,而后每次刷新的时候这个t都在变化,不知道他是当前的时间戳,仍是每次刷新会生成一个随机数(后面叫他时间戳)。只看懂了这两个参数,其余的没看懂,先无论,先记录下这两个参数。经过这张图我们能够知道我们第一步须要作什么:websocket

1. 首先须要生成一个二维码,而且二维码须要有一个客户端id。(让客户端id每次刷新的时候随机生成)

每次进入该页面,由后台生成一个带有随机客户端id的二维码。到了这儿,pc端就先告一段落。cookie

2.手机端实现登陆功能,登陆成功以后,由后台生成并返回登陆凭证(后面叫token)

token:登陆成功以后的凭证,这个登陆凭证最好使用数据库来存,以前我本身使用session,忽略了一个问题,session的本质是cookie,因此不能跨平台,在移动端保存的session,在pc端获取不到。session

3.实现扫一扫的功能(必定要移动端拿到后台生成的token以后才能使用扫一扫的功能)

4.扫pc端的二维码而且获取到客户端id(client_id)

当咱们拿到这个client_id以后,这个扫码登陆就算完成了一大半了,如今要作的,就是想办法将手机端的token,拿给pc端,pc登陆成功,而后将这个token保存下来,每次操做须要登陆验证的时候,将token发给后台进行验证就ok了。app

5.pc端和移动端实时通讯(websocket)

我在移动端是使用的html原生的websocket,没有使用插件,后台是使用的ws模块。socket

6.将移动端的token推送给对应的客户端(client_id排上用场)

后台推送消息的时候,同过client_id能够判断出,把这个token应该推送给哪个客户端(client_id)网站

在以前,我是没有发现client_id有什么做用,pc端和移动端实时通讯以后,直接将这个token推送给全部人。pc端收到,和后台token作一个验证(看token是否有问题),直接就提示登陆成功。结果pc同时开几个登陆网页出来的时候,手机一扫,全部打开的网页所有都登陆了,仍是登陆的同一个帐号,很尴尬!!!!!插件

完成这6步,简单的二维码登陆就算完成了。

相关文章
相关标签/搜索