在进行网络和 Web 开发时,用户常常会用到手机扫码登录功能。以下是对该功能原理的详细解析。
1. 手机登录和PC登录的原理
1.1 手机登录原理
- 用户在手机应用上输入账号和密码,并携带设备信息一起请求服务器。
- 服务器接收到请求后,验证用户的账号和密码。如果账号或密码不正确,则返回错误提示;如果正确,则生成一个 token 并返回给客户端。
- 客户端携带 token 和设备信息请求服务器,服务器验证 token 是否有效,并检查设备信息。如果 token 有效且设备信息匹配,允许访问服务器资源。
这种方法确保了即使 token 泄露,攻击者也无法使用其他设备进行访问,因为设备信息必须匹配。
1.2 PC登录原理
- 用户在PC端输入账号和密码请求登录服务器。
- 服务器接收到请求后,验证用户的账号和密码。如果不正确,返回错误提示;如果正确,生成一个 token 并返回给客户端。
- PC端携带 token 请求服务器,服务器验证 token 的有效性。如果 token 有效,处理请求并返回响应。
2. 手机扫码登录的原理
手机扫码登录的实质是通过已经在 APP 上登录的用户帮助 PC 端应用向服务器申请一个 PC 端的 token。具体流程如下:
2.1 生成二维码
- 用户打开PC端应用,PC端向服务器申请一个二维码ID。
- 服务器生成一个唯一的二维码ID,并将其与二维码过期时间等信息存储在 Redis 中,然后返回二维码ID给PC端。
- PC端根据二维码ID生成一个用户可扫描的二维码,并监听二维码状态的变更信息。
2.2 用户扫描二维码
- 用户使用已登录的手机APP扫描二维码,发送一个包含手机token、设备信息和二维码ID的请求到服务器。
- 服务器验证手机token的有效性和设备信息。如果有效,生成一个临时的 token,并将二维码状态修改为“等待用户确认登录”状态,然后返回 token 给手机端。服务器同时通知 PC 端二维码的状态变更。
2.3 用户确认登录
- 用户在手机上点击确认登录后,发送一个包含临时 token 的请求到服务器。
- 服务器验证临时 token 的有效性。如果有效,生成一个 PC 端的 token,并将二维码状态修改为“登录成功”状态。服务器将 PC 端的 token 和二维码状态信息缓存到 Redis 中,同时推送这些信息到 PC 端。
- PC 端接收到二维码状态变更通知后,隐藏二维码并跳转到应用的主页。
服务器与客户端的通信方式
在手机扫码登录过程中,服务器需要实时将二维码状态变更推送给PC客户端。常见的实现方式包括:
- WebSocket:实现双向实时通信,适合高实时性要求的场景。
- Server-Sent Events(SSE):服务器单向推送,适合简单的实时更新。
- 客户端轮询:定期请求服务器,适合对实时性要求不高的场景。
总结
- 手机扫码登录过程中,二维码状态变更需要服务器与客户端之间的实时通信。
- 该流程的核心是利用已登录APP的用户,帮助PC客户端获取服务器颁发的PC端 token,从而实现PC端的登录。
通过这些步骤,完整地实现了一套手机扫码登录的流程。每次二维码信息变更,服务器都会及时推送给PC客户端,确保用户体验的流畅性和安全性。