V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
lzjun
V2EX  ›  程序员

用公众号来做验证码接收场景

  •  
  •   lzjun ·
    lzjun567 · 2019-06-27 16:12:48 +08:00 · 7240 次点击
    这是一个创建于 2005 天前的主题,其中的信息可能已经有所发展或是发生改变。

    任何一个网站或者 APP,如果要避免用户滥用注册功能,就必须确保注册的是真人而不是脚本程序,在 web2.0 时代,我们一般通过验证注册者的邮箱,注册后给用户邮箱发一个激活链接用户主动点击激活链接后才认为是一个真人,否则可能是机器人在注册。

    移动互联网,人人一台手机,注册方式改成了短信验证码,用户输入手机号码,系统会给手机发送一个验证码,必须是有效的验证码才能注册成功。

    以上两种方式我们一般都是用第三方平台,比如邮件服务商有 mailgun,sendcloud,短信平台则更多,这里就不举例,不过大部分平台对个人开发者并不那么友好,或者收费很贵。

    而我尝试使用微信公众号来是实现这种功能,发现效果很好。因微信平台对个人订阅号开放了发送接收信息的接口。具体怎么实现呢? 看看二十次幂项目中我是怎么做的?

    注册时,会有一个获取验证码的入口,点击过去就是告诉你怎么获取验证码

    用户关注公众号之后,每个用户都有唯一的 OPENID,所以我们可以设计一张验证码的表,字段有:

    为了简化,我只列出关键字段

    openid
    code
    valid # 是否有效
    

    账户表:

    email
    password
    openid
    

    为了防止用户多次注册,我们可以限制每个 openid 只能申请一个注册验证码,也就只能注册一个账号。

    用户回复关键字后,我们就给他生成一个验证码记录。这个验证码是唯一的,例如:

    {"openid":"xxxxx", "code":"123", "valid":True}
    

    用户注册时,必须将验证码和邮箱以及密码字段提交,这样,我们就可以通过验证码找到对应的 openid,这样就可以将 openid 关联到对应 email 账号了。

    {"openid":"xxxxx", "email":"[email protected]", "password":"666"}
    

    关联后,也可以通过输入自己的 email 重置密码了,如果你输入别人的 email,是不是也可以重置呢?不行的,因为 email 与 openid 绑定了,你输别人的 email 是对不上你 openid 的

    第 1 条附言  ·  2019-06-27 18:07:18 +08:00
    很多留言里面说到为什么不直接接入微信登录,这里统一回答下,网站接入微信登录需要企业认证,所以此路不通
    第 2 条附言  ·  2019-06-28 11:49:14 +08:00
    没有看明白的可以体验下流程,测试地址: https://www.ershicimi.com
    41 条回复    2019-06-29 08:31:33 +08:00
    misaka19000
        1
    misaka19000  
       2019-06-27 16:16:00 +08:00
    个人现在更喜欢那种动态验证码登录的功能,这样就不需要密码了
    Tomorrowxxy
        2
    Tomorrowxxy  
       2019-06-27 16:19:22 +08:00
    49 年入国军?
    lzjun
        3
    lzjun  
    OP
       2019-06-27 16:22:11 +08:00
    @misaka19000 如果浏览器记住了密码也不需要每次输入,是不是更省事
    mateor95
        4
    mateor95  
       2019-06-27 16:24:18 +08:00
    那么问题来了,都用上微信公众号了,为什么不直接扫码(网页)或者微信登录( APP )
    ETiV
        5
    ETiV  
       2019-06-27 16:24:19 +08:00
    简单说就是「上行验证码」

    - 每个码都有自己的有效期
    - 同一段时间内,各个验证码都不会重复
    - 验证码生成后展示给用户
    - 用户提交验证码时,即可获得用户的 OpenID,便可以与之绑定(所以 email 也能变成可选项)

    这种流程,我做过 Telegram 的

    QQ 的找回密码,需要用户编辑短信发送到 106XXXXXX 大致上也是这样
    misaka19000
        6
    misaka19000  
       2019-06-27 16:31:51 +08:00
    @lzjun #3 这种对多终端登录不友好
    jetpy
        7
    jetpy  
       2019-06-27 16:59:39 +08:00
    我有一个网站就是利用的公众号做用户管理的, 关注公众号后,每次登录前都通过公众号获取密码 自己都觉得略麻烦,好在 APP 那里用户只需要登录一次
    yavin
        8
    yavin  
       2019-06-27 17:02:14 +08:00
    直接微信登录不是更快
    moonsola
        9
    moonsola  
       2019-06-27 17:17:35 +08:00
    通过微信扫一扫绑定账号不是更方便?
    Jirajine
        10
    Jirajine  
       2019-06-27 17:21:55 +08:00 via Android   ❤️ 4
    本来就该是邮箱,只是泥国搞什么实名制恶心的用短信。现在你到好,连微信这种垃圾都拿出来当验证了。
    TobiahShaw
        11
    TobiahShaw  
       2019-06-27 17:24:24 +08:00
    为什么不接入微信登录的 SDK 呢
    passerbytiny
        12
    passerbytiny  
       2019-06-27 17:31:35 +08:00
    想要关联微信 openid,同时又不想让微信审核第三方登录,请直说!
    lzjun
        13
    lzjun  
    OP
       2019-06-27 18:05:06 +08:00 via Android
    @mateor95 因为需要企业认证
    lzjun
        14
    lzjun  
    OP
       2019-06-27 18:05:59 +08:00 via Android
    @moonsola 需要企业认证
    lzjun
        15
    lzjun  
    OP
       2019-06-27 18:09:31 +08:00 via Android
    @Jirajine 你天天用的微信是垃圾?
    npe
        16
    npe  
       2019-06-27 18:16:11 +08:00 via Android
    然后大家都要加你好友?
    npe
        17
    npe  
       2019-06-27 18:16:32 +08:00 via Android
    @npe 注册之前还得加你微信?
    annielong
        18
    annielong  
       2019-06-27 18:23:48 +08:00
    更利于吸粉吧,前段时间地铁充值还让关注一个公众号,没两天这个公众号就成了一个营销号,
    Jirajine
        19
    Jirajine  
       2019-06-27 18:25:37 +08:00 via Android   ❤️ 2
    @lzjun 你天天用微信?
    你这默认人人都用微信可比那些默认人人都用手机强制绑定(还能甩锅 zf )恶心的多了。
    LeonKennedy
        20
    LeonKennedy  
       2019-06-27 18:34:07 +08:00
    西部数码就是这么干的。我设置的 qq 快捷登陆,他会跳转到一个界面,让你扫码关注西部数码,然后通过公众号回复给你验证码
    MonoLogueChi
        21
    MonoLogueChi  
       2019-06-27 18:37:12 +08:00 via Android
    @mateor95 微信登录需要认证才可以
    shijingshijing
        22
    shijingshijing  
       2019-06-27 18:41:08 +08:00   ❤️ 1
    把自己的业务命运和 wech@t 绑定到一起,很好很强大。

    未来不知道什么时候公众号出发了威信的 G 点,给你把公众号一封,一刀就给你把客户源全部剁掉,你哭都来不及。
    starsky007
        23
    starsky007  
       2019-06-27 18:49:06 +08:00 via Android
    邮件和短信都是开放的,而微信不是
    daomen
        24
    daomen  
       2019-06-27 19:16:09 +08:00 via iPhone
    6sq.net 这个网站就是在微信公众号回复关键词获取验证码的。主程序用的 wecenter。
    version
        25
    version  
       2019-06-27 19:46:31 +08:00
    短信验证码接口.很多云平台都不需要企业认证了.个人申请就可以了..然后再找第三方手机号码认证...
    既然是注册用户机制.没必要那么省..短信验证码都不愿意出.1 万次 400 元..有 10 万用户能吹上天了
    leopku
        26
    leopku  
       2019-06-27 21:25:27 +08:00 via iPhone   ❤️ 1
    @lzjun shi 一样的体验,几乎所有公众号都变成营销号,还不垃圾?!
    Tink
        27
    Tink  
       2019-06-28 07:48:28 +08:00 via iPhone
    有个问题就是不用微信的人没法注册了
    ryanlid
        28
    ryanlid  
       2019-06-28 09:28:00 +08:00
    > “为了防止用户多次注册”

    用户注册多个微信,就可以多次注册了。
    janus77
        29
    janus77  
       2019-06-28 10:20:19 +08:00
    openid 好像不唯一我记得……以前接分享的时候注意到的
    lzjun
        30
    lzjun  
    OP
       2019-06-28 11:43:38 +08:00 via Android
    @janus77 每个用户在某个公众号下面 是唯一的
    lzjun
        31
    lzjun  
    OP
       2019-06-28 11:44:32 +08:00 via Android
    @ryanlid 这种方式并没有问题啊,我只防止机器无限制的注册就行
    lzjun
        32
    lzjun  
    OP
       2019-06-28 11:45:30 +08:00 via Android
    @Tink 这个反而不担心,10 亿日活的微信不用微信的人极少
    lzjun
        33
    lzjun  
    OP
       2019-06-28 11:50:02 +08:00 via Android
    @daomen 他们直接支持微信登录,这种更方便了,但是需要企业认证
    t94P9
        34
    t94P9  
       2019-06-28 12:18:11 +08:00 via iPhone
    好恶心…短信实名已经够恶心了 还来个微信
    suom
        35
    suom  
       2019-06-28 12:32:14 +08:00 via Android
    公众号被举报封号就惨了…
    tiaod
        36
    tiaod  
       2019-06-28 12:53:05 +08:00
    那希望你永远不要进入与腾讯构成直接竞争的行业吧,例如即时通讯。
    lzjun
        37
    lzjun  
    OP
       2019-06-28 15:33:00 +08:00
    @suom 又不干坏事,为啥会被封号
    shuizhengqi
        38
    shuizhengqi  
       2019-06-28 15:46:43 +08:00
    @Jirajine 没错,我国是有短信认证,请问你是哪国?
    Jirajine
        39
    Jirajine  
       2019-06-28 16:37:14 +08:00 via Android
    @shuizhengqi 你国意在与或是集体荣誉感爆棚,或是吃人的既得利益者划清界限,普天之下,莫非王土,既非我土,何谓我国?
    至于我是哪国?不知道。反正不是你国。
    LicV587
        40
    LicV587  
       2019-06-28 16:43:57 +08:00
    你这样还不如小程序生成带参数二维码,直接微信扫码,跳转到小程序,用户授权登录
    leopku
        41
    leopku  
       2019-06-29 08:31:33 +08:00 via iPhone
    @lzjun sever 酱干啥坏事了,你来说说?!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2679 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 08:32 · PVG 16:32 · LAX 00:32 · JFK 03:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.