跳转到主内容
极星编程网:以代码为星,赴技术山海!

uni-app怎么实现扫码登录功能 uni-app网页端与App联动

核心是前后端协同维护可轮询的登录态绑定关系:Web端生成带过期时间的UUID二维码,App扫码解析后提交UUID与自身token完成绑定,Web端定时轮询状态直至成功或超时。 uni-app 实现网页端扫码登录、App 端联动,核心不是“调用
uni.scanCode
就完事”,而是前后端协同维护一个**可轮询的登录态绑定关系**。Web 端生成带唯一 ID 的二维码,App 扫码后提交该 ID + 自身用户凭证(如
token
),后端完成绑定,Web 端靠轮询感知结果——这才是稳定落地的链路。 Web 端怎么生成可轮询的二维码 关键不是渲染图片,而是生成一个能被 App 解析、且服务端能追踪的 payload。常见错误是直接把跳转链接塞进二维码,导致无法携带用户身份信息。 后端提供
/api/generate-qrcode
接口,返回一个随机
uuid
(如
"a1b2c3d4-5678-90ef-ghij-klmnopqrstuv"
),并存入数据库,状态设为
"pending"
Web 端用这个
uuid
拼出扫码内容:例如
{"type":"login","uuid":"a1b2c3d4-...","ts":1745483364}
,再用
qrcodejs2
生成图像 不要用纯 URL(如
https://example.com/login?code=xxx
)作为二维码内容——App 扫出来只是打开网页,无法自动回传 token 若需兼容 H5 直接扫码跳转,可加字段区分:
{"type":"login","uuid":"...","mode":"app"}
,App 端解析后走绑定逻辑,H5 端忽略或 fallback App 端扫码后怎么提交登录请求 扫码拿到的是字符串,必须手动 JSON.parse,再提取
uuid
,不能假设它一定是 URL 或 base64。 调用
uni.scanCode
后,检查
res.result
是否为合法 JSON 字符串,用
try...catch
包裹
JSON.parse
确认含
uuid
字段且非空,否则提示“无效二维码” 发起绑定请求时,必须带上当前用户的认证凭据(如从
uni.getStorageSync('token')
取出的 Bearer Token),后端靠它识别是谁扫的码 示例请求:
uni.request({ url: 'https://api.example.com/bind-login', method: 'POST', header: { Authorization: 'Bearer ' + uni.getStorageSync('token') }, data: { uuid: parsed.uuid } })
后端收到后,更新数据库中对应
uuid
记录的
user_id
和状态为
"completed"
uni-app电商系统实战精讲课程课件 uni-app电商系统实战精讲课程 下载 Web 端怎么安全轮询登录结果 轮询不是无脑
setInterval
,要控制频率、超时和终止条件,否则容易触发接口限流或白屏卡死。 建议初始间隔 1s,连续 3 次无响应后延长至 2s,最多轮询 60s(1 分钟)后自动失败 每次请求带
uuid
,后端查数据库:若状态为
"completed"
,返回
{status:"success", user:{id:123, name:"xxx"}, token:"xxx"}
;若为
"failed"
,前端清空二维码并提示重试 一旦收到成功响应,立即
clearInterval
,保存
token
到
localStorage
,跳转首页 注意:轮询请求需带
Credentials: "include"
(若用 cookie 鉴权),但更推荐 token 放 header,避免跨域 cookie 问题 为什么不能直接用微信扫码登录替代这套流程 微信扫码登录(
snsapi_login
)只适用于「网站应用」场景,且强制跳转微信域名、依赖用户已登录微信账号。而 uni-app App 端扫码登录的本质是「自有账号体系打通」,两者协议层不兼容。 微信扫码返回的是
code
→ 换
access_token
→ 换
openid
,你拿不到 App 端当前登录用户的 ID App 端若未集成微信 SDK,根本无法响应微信 redirect_uri 的跳转,
web-view
里扫码也受限于 iOS WKWebView 的跳转拦截 真正需要的是 App 身份“主动声明”:我(App 用户 A)扫了这个码,我要登录 Web 端——这只能靠自定义 UUID + token 绑定实现 最容易被忽略的一点:UUID 必须带过期时间(如 5 分钟),数据库字段加
expires_at
,轮询接口和绑定接口都要校验。否则攻击者可长期重放旧二维码,伪造登录。

相关文章