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

2019-06-27 16:12:48 +08:00
 lzjun

任何一个网站或者 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":"xx@ershicimi.com", "password":"666"}

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

7241 次点击
所在节点    程序员
41 条回复
misaka19000
2019-06-27 16:16:00 +08:00
个人现在更喜欢那种动态验证码登录的功能,这样就不需要密码了
Tomorrowxxy
2019-06-27 16:19:22 +08:00
49 年入国军?
lzjun
2019-06-27 16:22:11 +08:00
@misaka19000 如果浏览器记住了密码也不需要每次输入,是不是更省事
mateor95
2019-06-27 16:24:18 +08:00
那么问题来了,都用上微信公众号了,为什么不直接扫码(网页)或者微信登录( APP )
ETiV
2019-06-27 16:24:19 +08:00
简单说就是「上行验证码」

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

这种流程,我做过 Telegram 的

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

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

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

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

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

© 2021 V2EX