面试题精选-如何实现扫码登录
主要分为三个阶段,待扫描阶段、已扫描待确认阶段、确认阶段。
待扫描阶段
该阶段主要是生成二维码,属于PC端与服务器的交互。
步骤1:用户登录网页端,选择扫码登录,此时客户端会向服务端发送获取登录二维码的请求,服务端收到请求后,会随机生成一个唯一的二维码ID(UUID),会将二维码ID、二维码ID的信息绘制成的二维码图片,一并返回给客户端。
步骤2:PC端启动一个定时器,通过轮询的方式向服务器发送请求确认二维码是否已扫描、用户是否已登录、二维码是否已过期。(也可以采用长链接的方式,例如WebSocket)
注意事项:
- 二维码ID可以作为key值存入redis中,同时设置过期时间和扫码状态,若二维码过期,可进行刷新重新获取。
- 可以将二维码ID和过期时间返回给前端,让前端自己生成二维码图片。也可以由后端生成二维码图片返回Base64编码给前端。
已扫描待确认阶段
该阶段属于移动端与服务器的交互。
步骤3:移动端扫描二维码,获取二维码ID,然后将手机端的登录的凭证(token)和二维码ID作为参数请求服务端。
步骤4:服务端收到请求后,会校验token,校验成功后,变更二维码的状态为已扫描,同时将token与二维码ID关联,然后生成一个临时的token(用于确认登录的凭证),可以将该token和二维码ID存入到Redis中,并将该token会返回给移动端。
步骤5:PC端的定时器,会轮询到二维码状态已经发生变化,会将PC端的二维码状态更新为已扫描待确认状态,并让用户在手机端确认是否登录。
注意事项:
- 让用户确认的目的是防止其它人拦截token冒充去登录。
- 扫码之后点击确认之后可以往用户app或手机等设备发送登录提醒的通知,若不是本人登录,建议用户立即修改密码。
已确认阶段
步骤6:用户点击确认登录后,移动端携带之前服务端发送的临时token访问服务端,服务端校对完成后,会拿到二维码的ID,同时更新二维码状态为已确认,并给PC端生成一个正式的token,该token和用户信息(例如用户ID)可以组合在一起存到Redis中,同时将临时token从Redis中删除,后续PC端通过此正式token与服务端进行交互。
步骤7:PC端的定时器,会轮询到二维码状态已经发生变化,同时拿到PC端正式token。
人生如逆旅
我亦是行人

浙公网安备 33010602011771号