【面试 新谈】【第十五篇】实现扫码登录的设计思想
实现扫码登录的设计思想
三步走即可完成!!
整体步骤如下:
1.PC端打开登录页面,输入账号密码
点击登录,会第一次和服务器发生请求交互,服务器端,会返回给PC端一个带有ID唯一标识的二维码【此时ID相关的本次登录记录,会记录在后台服务器】
2.PC端会弹出来一个二维码,供用户扫码登录
这一个二维码识别出来,是如下的一串内容
http://mp.weixin.qq.com/wap/loginauthqrcode?action=scan&qrticket=3545849693b454355c5e32f183bbb1a9#wechat_redirect
可以看到有一个ID唯一标识包含在二维码中。
而此时从二维码弹出,直到移动端用户扫描二维码之前的中间的时间段内,PC端的页面会做一个轮询动作,一直在对后台服务器做请求,询问服务器这个二维码是否被移动端的用户扫描了没有。【直到本二维码设定的超时时间之前,轮询的动作会一直做下去】
3.移动端完成扫描动作,通知到服务器,将本次扫码的用户信息和这个二维码的ID唯一标识绑定起来
PC端的轮询一直在访问服务器,是否二维码已经被扫描了。当服务器告知,本次二维码的扫描动作已经完成,PC端就会成功跳转到登陆后的网页内,并把服务器返回的和ID绑定的微信用户信息,展示在登陆成功的页面。
一、整个的过程中,几方分别做的事情
PC端做了两件事:
1》访问服务器,返回二维码+ID
2》轮询服务器,等待服务器返回ID+绑定用户信息
移动端做了一件事:
1》扫描二维码,通知服务器,ID+用户信息传递给服务器
服务器做了三件事情:
1》PC端请求过来时候,返回给PC端一个拥有唯一标识ID的二维码
2》移动端传递ID+用户信息过来时,服务器对ID+用户信息做一个绑定
3》应对PC端的轮询请求,响应给PC端,本ID对应的用户信息
二、针对PC端的轮询操作,服务器端需要做的是:
保证ID唯一标识的做好缓存,避免大量请求直接访问到数据库
三、对于服务器怎么通知到PC端,用户扫码成功,除了PC端做轮询的方式外,还有其他的方法么?
服务器端配合使用socket,做到服务器端消息通知PC端,完成服务器端的通知!