PC 端网站使用微信扫码登录 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
dream4ever
V2EX    程序员

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

  •  
  •   dream4ever 2024 年 7 月 29 日 3927 次点击
    这是一个创建于 600 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    目前的整体流程如下:

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

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

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

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

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

    14 条回复    2024-07-30 10:49:45 +08:00
    liKeYunKeji
        1
    liKeYunKeji  
       2024 年 7 月 29 日 via Android   1
    不用这么麻烦吧,无论是小程序端还是 pc 端,都是在同一个小程序,openid 都是一样的。pc 端生成的小程序码,微信扫码仍然可以调用一次 wx.login 获取 openid ,然后对比数据库的 openid 是否已存在,如果存在则登陆,不存在则走注册的流程。轮询的目的是检查是否已经授权登陆获取到 openid ,设置一个过期时间,例如 2 分钟内没有获取到 openid 则代表没完成整个登陆过程,则停止轮询。

    可以看一下我的: https://segmentfault.com/a/1190000044295229
    vczyh
        2
    vczyh  
       2024 年 7 月 29 日
    一般来说 PC 扫码和小程序各用各的,同一个主体 unionid 是相同的,可以通过这个判断用户唯一。如果非要走 PC 扫码小程序登录可以参考腾讯云登录流程。
    chairuosen
        3
    chairuosen  
       2024 年 7 月 29 日
    3 秒一次,轮询 5 分钟,然后二维码罩一个蒙层说失效了,点一下刷新继续轮询
    GPT6
        4
    GPT6  
       2024 年 7 月 29 日
    用 unionid 比较好
    dj721xHiAvbL11n0
        5
    dj721xHiAvbL11n0  
       2024 年 7 月 29 日
    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
        6
    dream4ever  
    OP
       2024 年 7 月 29 日
    @x2420390517 刚知道可以用二维码链接拉起小程序,之前搜索没看到这方面的信息,多谢。
    另外虽然目前的业务可能上线后访问量不高,不过万一访问量高了,生成小程序码接口受限了是有点麻烦,这么一看的确还是前端生成二维码更省心一些,对后端的压力小。
    dream4ever
        7
    dream4ever  
    OP
       2024 年 7 月 29 日
    @vczyh
    @GPT6 刚研究了一下,用 unionid 的话,还需要在微信开发平台上做认证,认证还得找法人签字还得交钱,不想折腾了。
    TArysiyehua
        8
    TArysiyehua  
       2024 年 7 月 29 日
    直接用网页生成一个随机串,生成一个二维码,小程序扫码的时候把这个随即串带给后端,设置超时时间。
    网页 3 秒轮询这个随机串,并检查自身或后端返回是否超时,超时显示二维码过期重新刷新。。。
    pota
        9
    pota  
       2024 年 7 月 29 日
    我之前做的网站类似逻辑,不过是用的关注事件,当时做的是 2 秒一次。这个具体时间需要看你需要达到的用户体验和用户量以及 QPS 的承担量。不过这部分还是推荐独立程序做,防止影响已登陆业务
    pota
        10
    pota  
       2024 年 7 月 29 日
    @pota #9 微信接口获取二维码带上一个随机字符串,因为二维码是有一个 5 分钟还是多久的有效期,前端每次请求后台获取的时候显示,定时添加遮罩提醒用户点击刷新二维码
    cnbattle
        11
    cnbattle  
       2024 年 7 月 29 日 via Android
    你的方案可以,轮询时间短点 1-3s ,过期时间一般长点 三五分钟,轮询 scene 值 落到 redis ,别的没啥了
    dj721xHiAvbL11n0
        12
    dj721xHiAvbL11n0  
       2024 年 7 月 30 日
    @dream4ever #6 只是那个链接可以拉起小程序,参数你可以自定义,然后在小程序页面获取
    xiguadong
        13
    xiguadong  
       2024 年 7 月 30 日
    @pytth 微信小程序 3 方跳 个人小程序是没法的唛
    tallest
        14
    tallest  
       2024 年 7 月 30 日
    SSE ,服务器处理完了直接返回到前端去,ChatGPT 的流式输出就是用的这个,后端生成一点儿就返回给前端一点儿,一样的逻辑
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2776 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 10:01 PVG 18:01 LAX 03:01 JFK 06:01
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86