《L03》——记录一次因缓存造成的坑
踩坑位置
《L03》中 3.3 节的 手机注册验证码
。
报错如下:
打开报错中推荐的网址: https://troubleshoot.api.aliyun.com?q=SignatureNonceUsed&product=Dysmsapi
我也不知道是啥错误,也不知道该如何解决。。。
解决的过程
(1)首先需要排除是否因为自己手敲的时候敲错了?
完整地复制了教程中的代码,可是还是报同样的错误。说明没有敲错。
(2)现在阿里云 不支持个人用户申请未上线业务
,即不能添加签名:
只能用 API发送测试功能
:
这一点和教程中的不同,所以必须搞清发送验证码的逻辑,假如真是因为这点不同而导致出现这个问题,也好修改。
发送验证码的业务逻辑:
...
class VerificationCodesController extends Controller
{
public function store(VerificationCodeRequest $request, EasySms $easySms)
{
$phone = $request->phone;
// 生成4位随机数,左侧补0
$code = str_pad(random_int(1, 9999), 4, 0, STR_PAD_LEFT);
try {
$result = $easySms->send($phone, [
'template' => config('easysms.gateways.aliyun.templates.register'),
'data' => [
'code' => $code
],
]);
} catch (... $exception) {
...
}
}
一开始看的有点蒙圈,但是查看 Overtrue/easy-sms
的 README.md
文件之后,发现发送验证码的逻辑其实挺简单的:
$easySms->send(13188888888, [
'content' => '您的验证码为: 6379',
'template' => 'SMS_001',
'data' => [
'code' => 6379
],
]);
教程中发送验证码的代码中的 $phone
和 $code
都好理解,关键是
'template' => config('easysms.gateways.aliyun.templates.register')
在 tinker 中测试 config('easysms.gateways.aliyun.templates.register')
,得到的却是 null:
config()
辅助函数:
config 函数获取 configuration 变量的值。 可以使用「点」语法访问配置的值,其中包括文件的名称和访问的选项。
打开 config
文件夹中的 easysms.php
文件,发现 register
的值已经配置好了:
可是为什么会返回 null 呢?
在里面随便添加了一些东西用于测试:
在 tinker 中 输入config('easysms.gateways.aliyun')
结果如下:
发现并没有改变,这才意识到是缓存的问题。
在清除缓存之后,重新测试,得到了预期的结果:
短信测试
清除缓存之后,在 Postman 中重新测试了一下:
成功地解决了 Bug。
推荐文章: