任何一个网站或者 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 misaka19000 2019-06-27 16:16:00 +08:00 个人现在更喜欢那种动态验证码登录的功能,这样就不需要密码了 |
2 Tomorrowxxy 2019-06-27 16:19:22 +08:00 49 年入国军? |
![]() | 3 lzjun OP @misaka19000 如果浏览器记住了密码也不需要每次输入,是不是更省事 |
4 mateor95 2019-06-27 16:24:18 +08:00 那么问题来了,都用上微信公众号了,为什么不直接扫码(网页)或者微信登录( APP ) |
![]() | 5 ETiV 2019-06-27 16:24:19 +08:00 简单说就是「上行验证码」 - 每个码都有自己的有效期 - 同一段时间内,各个验证码都不会重复 - 验证码生成后展示给用户 - 用户提交验证码时,即可获得用户的 OpenID,便可以与之绑定(所以 email 也能变成可选项) 这种流程,我做过 Telegram 的 QQ 的找回密码,需要用户编辑短信发送到 106XXXXXX 大致上也是这样 |
![]() | 6 misaka19000 2019-06-27 16:31:51 +08:00 @lzjun #3 这种对多终端登录不友好 |
![]() | 7 jetpy 2019-06-27 16:59:39 +08:00 我有一个网站就是利用的公众号做用户管理的, 关注公众号后,每次登录前都通过公众号获取密码 自己都觉得略麻烦,好在 APP 那里用户只需要登录一次 |
![]() | 8 yavin 2019-06-27 17:02:14 +08:00 直接微信登录不是更快 |
![]() | 9 moonsola 2019-06-27 17:17:35 +08:00 通过微信扫一扫绑定账号不是更方便? |
10 Jirajine 2019-06-27 17:21:55 +08:00 via Android ![]() 本来就该是邮箱,只是泥国搞什么实名制恶心的用短信。现在你到好,连微信这种垃圾都拿出来当验证了。 |
![]() | 11 TobiahShaw 2019-06-27 17:24:24 +08:00 为什么不接入微信登录的 SDK 呢 |
![]() | 12 passerbytiny 2019-06-27 17:31:35 +08:00 想要关联微信 openid,同时又不想让微信审核第三方登录,请直说! |
![]() | 16 npe 2019-06-27 18:16:11 +08:00 via Android 然后大家都要加你好友? |
18 annielong 2019-06-27 18:23:48 +08:00 更利于吸粉吧,前段时间地铁充值还让关注一个公众号,没两天这个公众号就成了一个营销号, |
19 Jirajine 2019-06-27 18:25:37 +08:00 via Android ![]() @lzjun 你天天用微信? 你这默认人人都用微信可比那些默认人人都用手机强制绑定(还能甩锅 zf )恶心的多了。 |
20 LeonKennedy 2019-06-27 18:34:07 +08:00 西部数码就是这么干的。我设置的 qq 快捷登陆,他会跳转到一个界面,让你扫码关注西部数码,然后通过公众号回复给你验证码 |
21 MonoLogueChi 2019-06-27 18:37:12 +08:00 via Android @mateor95 微信登录需要认证才可以 |
![]() | 22 shijingshijing 2019-06-27 18:41:08 +08:00 ![]() 把自己的业务命运和 wech@t 绑定到一起,很好很强大。 未来不知道什么时候公众号出发了威信的 G 点,给你把公众号一封,一刀就给你把客户源全部剁掉,你哭都来不及。 |
![]() | 23 starsky007 2019-06-27 18:49:06 +08:00 via Android 邮件和短信都是开放的,而微信不是 |
![]() | 25 version 2019-06-27 19:46:31 +08:00 短信验证码接口.很多云平台都不需要企业认证了.个人申请就可以了..然后再找第三方手机号码认证... 既然是注册用户机制.没必要那么省..短信验证码都不愿意出.1 万次 400 元..有 10 万用户能吹上天了 |
![]() | 27 Tink PRO 有个问题就是不用微信的人没法注册了 |
28 ryanlid 2019-06-28 09:28:00 +08:00 > “为了防止用户多次注册” 用户注册多个微信,就可以多次注册了。 |
![]() | 29 rb6221 2019-06-28 10:20:19 +08:00 openid 好像不唯一我记得……以前接分享的时候注意到的 |
34 t94P9 2019-06-28 12:18:11 +08:00 via iPhone 好恶心…短信实名已经够恶心了 还来个微信 |
![]() | 35 suom 2019-06-28 12:32:14 +08:00 via Android 公众号被举报封号就惨了… |
36 tiaod 2019-06-28 12:53:05 +08:00 那希望你永远不要进入与腾讯构成直接竞争的行业吧,例如即时通讯。 |
![]() | 38 shuizhengqi 2019-06-28 15:46:43 +08:00 @Jirajine 没错,我国是有短信认证,请问你是哪国? |
39 Jirajine 2019-06-28 16:37:14 +08:00 via Android @shuizhengqi 你国意在与或是集体荣誉感爆棚,或是吃人的既得利益者划清界限,普天之下,莫非王土,既非我土,何谓我国? 至于我是哪国?不知道。反正不是你国。 |
![]() | 40 LicV587 2019-06-28 16:43:57 +08:00 你这样还不如小程序生成带参数二维码,直接微信扫码,跳转到小程序,用户授权登录 |