PC 端网站使用微信扫码登录

51 天前
 dream4ever

目前正在开发的业务,有微信小程序端和 PC 网页端两个版本。

小程序端的登录逻辑,是通过调用微信的接口,获取用户的 openid ,把它作为用户的身份标识。

PC 网页端为了开发方便,也想让用户通过微信扫码登录,获取用户在小程序中的 openid ,这样就可以和小程序端共用一套用户身份。

目前的整体流程如下:

  1. PC 网页端调用接口来生成小程序码,然后显示在前端页面中让用户扫码。生成小程序码时,可以传入一个 scene 参数,后端在返回小程序码时,把这个 scene 参数一并返回,前端进行存储。

  2. 微信小程序扫码,拿到 scene 参数,然后把小程序用户的 openid 和 scene 作为 key-value 传给后端存储。

  3. PC 网页端查询后端接口,检查 scene 参数是否有对应的 openid ,是的话就将 openid 存储在前端。

现在的问题是,整体流程都走通了,但是最后一步 PC 网页端查询后端接口,以怎样的间隔轮询接口才是合理的方式?

我目前想的是每隔 5 秒轮询一次,累计轮询 5 次(这个值可以调整)都没能获取到 scene 对应的 openid 的话,就认为用户没有用微信扫码,然后停止轮询,不知道这样合不合适。

2893 次点击
所在节点    程序员
14 条回复
pytth
51 天前
不用这么麻烦吧,无论是小程序端还是 pc 端,都是在同一个小程序,openid 都是一样的。pc 端生成的小程序码,微信扫码仍然可以调用一次 wx.login 获取 openid ,然后对比数据库的 openid 是否已存在,如果存在则登陆,不存在则走注册的流程。轮询的目的是检查是否已经授权登陆获取到 openid ,设置一个过期时间,例如 2 分钟内没有获取到 openid 则代表没完成整个登陆过程,则停止轮询。

可以看一下我的: https://segmentfault.com/a/1190000044295229
vczyh
51 天前
一般来说 PC 扫码和小程序各用各的,同一个主体 unionid 是相同的,可以通过这个判断用户唯一。如果非要走 PC 扫码小程序登录可以参考腾讯云登录流程。
chairuosen
51 天前
3 秒一次,轮询 5 分钟,然后二维码罩一个蒙层说失效了,点一下刷新继续轮询
GPT6
51 天前
用 unionid 比较好
dj721xHiAvbL11n0
51 天前
1. 为什么不用二维码链接拉起小程序做登录,你去看看一些用案例,比如腾讯云的扫码登录( https://developers.weixin.qq.com/miniprogram/introduction/qrcode.html
2. 不要用生成小程序码去做登录,因为会有频率限制( https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/qrcode-link/qr-code/getUnlimitedQRCode.html
dream4ever
51 天前
@x2420390517 刚知道可以用二维码链接拉起小程序,之前搜索没看到这方面的信息,多谢。
另外虽然目前的业务可能上线后访问量不高,不过万一访问量高了,生成小程序码接口受限了是有点麻烦,这么一看的确还是前端生成二维码更省心一些,对后端的压力小。
dream4ever
51 天前
@vczyh
@GPT6 刚研究了一下,用 unionid 的话,还需要在微信开发平台上做认证,认证还得找法人签字还得交钱,不想折腾了。
TArysiyehua
51 天前
直接用网页生成一个随机串,生成一个二维码,小程序扫码的时候把这个随即串带给后端,设置超时时间。
网页 3 秒轮询这个随机串,并检查自身或后端返回是否超时,超时显示二维码过期重新刷新。。。
pota
51 天前
我之前做的网站类似逻辑,不过是用的关注事件,当时做的是 2 秒一次。这个具体时间需要看你需要达到的用户体验和用户量以及 QPS 的承担量。不过这部分还是推荐独立程序做,防止影响已登陆业务
pota
51 天前
@pota #9 微信接口获取二维码带上一个随机字符串,因为二维码是有一个 5 分钟还是多久的有效期,前端每次请求后台获取的时候显示,定时添加遮罩提醒用户点击刷新二维码
cnbattle
51 天前
你的方案可以,轮询时间短点 1-3s ,过期时间一般长点 三五分钟,轮询 scene 值 落到 redis ,别的没啥了
dj721xHiAvbL11n0
51 天前
@dream4ever #6 只是那个链接可以拉起小程序,参数你可以自定义,然后在小程序页面获取
xiguadong
51 天前
@pytth 微信小程序 3 方跳 个人小程序是没法的唛
tallest
50 天前
SSE ,服务器处理完了直接返回到前端去,ChatGPT 的流式输出就是用的这个,后端生成一点儿就返回给前端一点儿,一样的逻辑

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1060802

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX