微信一键授权手机号登录,是不是会出现用户一直刷的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
godleon
V2EX    程序员

微信一键授权手机号登录,是不是会出现用户一直刷的问题

  •  
  •   godleon 2024-09-05 17:52:48 +08:00 2184 次点击
    这是一个创建于 472 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求

    第一次写微信小程序,今天搞了一个一键授权手机号登录;

    但是我写完之后发现个问题;

    我现在是通过微信最新的 api ,绑定一个 bindgetphOnenumber="getPhoneNumber"。来获取手机号的 code ,

    然后拿着 code + access_token ,换取手机号;

    我拿到手机号,发给服务端,服务端判断是否有这个用户,存在 直接返回 Token ,不存在 异步注册 + 返回 token:

    问题

    但是他这个获取手机号的 api 是收费的,一次 0.03 元。 用户可以无限退出后,再认证; 这就导致一直调用;

    这个怎么解,或者说 我的授权认证登录的逻辑有问题没

    PS

    我试了一下,其他平台的一键授权登录,都是可以一直退 一直授权; 大佬们都是怎么做的

    10 条回复    2024-09-06 09:01:59 +08:00
    xuxuxu123
        1
    xuxuxu123  
       2024-09-05 17:54:49 +08:00
    用户 openid 或者 unionid 与手机号关联,如果 openid 已经存在关联的手机号,就不走微信接口
    godleon
        2
    godleon  
    OP
       2024-09-05 17:59:07 +08:00
    @xuxuxu123 但是你不走他这个组件,就拿不到手机号把, 你只要调他这个组件,回调成功,他就会扣费;
    xujunjie
        3
    xujunjie  
       2024-09-05 18:03:07 +08:00
    @godleon 获取 openid 的 code 和 获取手机号的 code 不是一个
    wenber
        4
    wenber  
       2024-09-05 18:04:23 +08:00   3
    先调用 wx.login ,拿到 code ,提交服务器换取 openid ,根据 openid 查询用户是否存在,若不存在,再获取 wx.login code 和 手机号 code 提交服务器换取手机号和 openid ,完成注册并返回凭证 token ,所以正常来说,一个新用户只需要调用一次获取手机号就可以了,之后的授权登录就不需要了
    ISOtropy
        5
    ISOtropy  
       2024-09-05 18:06:33 +08:00
    但是授权的手机号是验证码认证过的 所以应该不存在用户频繁更换手机号的情况 至于你说每一次都需要通过这个接口获取手机号费钱 可以选择手机号和 openid 绑定 下次根据 openid 鉴权用户就行了吧 我一年前开发过小程序 记得 openid 对于某一个小程序来说是唯一的 除非取消关注
    shengkai
        6
    shengkai  
       2024-09-05 18:11:14 +08:00
    总结下:

    1. 获取用户 openid(unionid)
    2. 查询服务端 openid 是否存在,如果存在返 token
    3. 如果 openid 不存在,获取手机号成功后,把 openid 和机号发给服务端,服务端异步注册 + 返回 token
    godleon
        7
    godleon  
    OP
       2024-09-05 18:27:01 +08:00
    @xujunjie
    @wenber
    @ISOtropy
    @shengkai
    我可以不可以理解为,现在微信快速验证手机号这个组件,是会弹出一个半屏的框,来让你授权点击;
    如果按照上面的步骤,我用户第一次登陆过之后, 以后登录就不会弹出这个授权的框了;
    我今天看了一下 滴滴出行, 我登录后 退出,在登录 每次都会弹这个手机号授权的框,其实相当于他们每次都要付这个接口费;
    xuxuxu123
        8
    xuxuxu123  
       2024-09-05 18:46:38 +08:00
    @godleon 有 2 种授权:
    1 、获取用户信息授权,这个可以拿到 openid
    2 、手机号授权,可以获取手机号

    业务上:
    先获取用户信息好搜全,然后拿到 openid ,查库是否存在用户,是否已经存在手机号;如果没有手机号,再出现获取手机号的按钮给用户手机号授权;
    musi
        9
    musi  
       2024-09-05 20:33:34 +08:00 via iPhone
    如果说是用户刷你的接口费用,那确实有这个问题,不管你后端怎么判断,我只需要通过 mitm 把你的响应改了就过检验了
    samnya
        10
    samnya  
       2024-09-06 09:01:59 +08:00
    首先,我们的应用直接不提供退出登录的功能。
    那新用户只有一次机会在未绑定手机号的情况下调用绑定手机号。
    因为启动的时候调用 wx.login 是无需任何授权的,后续都通过 openid 换取 token 。
    不管他怎么删小程序,反正打开时都是已登录的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2830 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 13:54 PVG 21:54 LAX 05:54 JFK 08:54
    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