1.访问一个控制器(controller)提供的 API,该 API 会渲染并返回一个网页,同时通过 Model 对象给网页传递一些属性,比如 redirect(APP 授权后 PC 端要跳转的网页地址)、subscribe(用于开启 SSE 长连接的 URL)、qrcode(二维码的内容或地址)。
2.在返回的网页里创建一个 EventSource 实例,监听其 onmessage 和 onopen 事件。EventSource 会向 subscribe 对应的 API 发起请求以建立 SSE 长连接。在这个 API 处理逻辑中,会创建 SseEmitter 实例并将其存入缓存(cache),同时设置连接的超时处理等逻辑。
3.还需要实现一个二维码扫码接口,该接口主要处理手机端扫码后的信息。接口会记录扫码相关的 id,并通过之前建立好的 SSE 长连接向 PC 端推送 "scan" 消息,告知 PC 端已经扫码成功,而非通过 Model 返回信息和 HTML 页面。
4.用户点击手机端页面中的超链接,将 token 传递给后端的另一个接口。后端接收到 token 后,通过之前建立的 SSE 长连接向 PC 端推送包含 token 的登录成功消息。PC 端收到消息后,会存储 token 并自动跳转到 redirect 指定的页面,而不是直接切换到“登入成功”页面。
幻想成为一个打工皇帝
浙公网安备 33010602011771号