WordPress插件:后台注册通过短信验证用户手机号
本插件开发于2017年,目前阿里云的短信接口和管理后台已经发生变化,同时几大主流的云服务商对个人开发者申请短信接口并不友好,要么要求一次性够买1万条套餐,要么短信签名需要各类证明,所以博主暂无计划更新本插件的短信接口,亦无法保证本插件是否还可以正常使用。
如果大家有什么对个人开发者友好的短信接口,可以留言推荐一下。
编辑于2022年1月17日
经常上网的你,可能已经注意到,目前国内很多网站注册都需要填写手机号了,并且还要接收验证码以确认你是手机号的实际拥有人。这么做可能会引起很多人的反感,觉得这会泄露隐私,但是在目前国家大力实行手机号实名制以及网络实名制的大背景下,根据相关法律规定,网络运营者必须验证用户真实身份,否则会面临网站被关闭及罚款的处罚。目前国内手机号都已实名,验证手机号实际上就已经完成了监管层要求的验证用户真实身份的要求。
我们不争论验证用户手机号的合理性,作为守法公民,按法律规定行事准没错。在WordPress后台用户注册页面,默认只有用户名和电子邮件两个输入框,想要收集注册用户的手机号并验证真实性,该如何实现呢?经常访问露兜博客的朋友可能会记得我之前写过一个插件:WordPress自定义用户注册页面插件,通过这个插件可以扩展WordPress的注册表单功能。在这个插件的基础上,我利用了点业余时间,重新写了个注册时可以验证用户手机号的插件,暂且命名为:Ludou Phone Register
本插件可以免费使用,代码公开,需要本站提供二次开发、更换短信发送接口、添加/修改功能等才需要收费。
插件截图
插件功能
- 在注册页面,可通过短信验证码验证用户手机号真实性
- 在注册页面,用户可直接设置密码
- 在后台 - 个人资料 - 修改手机号页面,用户可以修改手机号
- 可防CSRF跨站攻击
- 图片验证码自动过期,可防短信轰炸
短信接口
这里用到的短信接口是:阿里云短信服务,为什么选用阿里云短信服务作为本插件的短信服务商呢?主要有几点以下原因:
- 有10元的体验红包,开发测试插件正好可以用到;
- 个人用户也可以使用,很多短信接口只有企业可以用;
- 大厂不解释。
不管在哪,发短信都是要收钱的,天下没有免费的午餐,具体价格表请看:短信价格表。
使用方法
- 为了确保插件能够正常运行,推荐使用PHP 5.6以上的版本,低于这个版本可能导致插件无法使用;
- 阿里云短信服务需要一个阿里云账户,也可以用淘宝账号登陆,没有的可以自己注册一个;
- 登陆阿里云后台:登陆地址;
- 新使用的阿里云短信,阿里云会赠送一个有效期一个月的10元代金券,可以抵扣短信费。代金券使用完后需充值才能继续使用短信服务;
- 在阿里云控制台的 秘钥管理页面,点击 创建Access Key,并且确保处于 启用 状态,获取到 AccessKeyId 与 AccessKeySecret;
- 在阿里云 短信签名页面,添加短信签名,签名类型选择"验证码或短信通知",签名填你的网站名称。
不懂的可以看阿里云的文档:申请短信签名; - 在阿里云 短信模板页面,添加短信模板,模板类型选择"验证码",模版名称自己填,模版内容可自行发挥,将验证码用变量
${code}
代替即可。如你可以设置模板内容为:
${code} 这是您的短信验证码,10分钟内有效。
或验证码 ${code}
不懂的可以看阿里云的文档:申请短信模板 - 短信签名和短信模板待阿里云审核通过后,记住签名名称和模版CODE;
- 点此下载插件,并解压;
- 用文本编辑器(没有就用记事本)打开ludou-phone-register/config.php,按照注释替换成你的AccessKeyId、AccessKeySecret、签名名称和模版CODE,修改后类似:
// 阿里云 Access Key Id $AccessKeyId = '23456783'; // 阿里云 Access Key Secret $AccessKeySecret = 'cmmmmm0abcdefd8h35861a801ac752d5'; // 短信签名 $sign = '阿里云'; // 短信模板CODE,如SMS_123456789 $template = 'SMS_123456789';
- 将文件夹ludou-phone-register上传至你的网站WordPress插件目录下,即/wp-content/plugins/,然后到WordPress后台激活插件Ludou Phone Register即可,你的后台注册表单就已经像上图的一样了。该插件只针对单站点,开启WordPress多站点功能,本插件无效。
注意,本插件和Ludou Custom User Register插件不可同时使用,可能会出现冲突。
插件使用过程中有什么问题,随时可以:给我留言。
更新记录
1.0版 2017年5月2日
* 首个版本
2.0版 2017年9月14日
* 将短信接口由阿里大于换成了阿里云短信
* 修复后台修改手机号的显示错误
3.0版 2021年5月26日
* 因前几个版本使用的验证码无法适用新环境,删除了图片验证码
PS:请大家按照我文章中介绍的操作步骤进行申请接口和安装插件,否则可能用不了本插件。有同学想当然地去阿里云市场申请了个短信接口,结果用不了,过来质问我说,你的两个版本插件都是不能用的,都发不了短信,我自己改了就都能用,你说的什么测试正常都是骗人的。
接口都不是同一个接口,短信能发的出去才是见了鬼了呢!
-- 完 --
本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:露兜即刻 https://www.ludou.org/wordpress-register-check-user-phone-via-sms.html
好像发不了短信了,是不是阿里云短信服务更新了api接口规则?或者需要下载阿里云的短信sdk?
插件安装了没反应
你好,点击“获取短信验证码”没反应,貌似 add_action('wp_ajax_sendSms', 'sendSms'); 没有执行,请问是怎么回事?
http://www.ludou.org/tool/o-base64/
这个工具无法访问了,好可惜!!!
发送短信会卡图形验证码的长度验证,原因是:没有地方输入图形验证码,发短信接口还必须需要个验证码防止被刷接口,于是:
<p>
<label for="captcha_code">图形验证码<br/>
<input id="captcha" class="input" type="text" size="25" value="" name="captcha_code"/>
</label>
</p>
我们需要在index.php这个文件中,第182行下面添加一个验证码的输入框,这样就可以正常发出短信了。