《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-smsREADME.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。

参考

  1. 《如何在Laravel5中清除缓存》
  2. 《文档》
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!