mochat
mochat copied to clipboard
关于 “未认证,没有token”的问题
这个问题历史问题中也都有问过,但是都没给满意的答复,就关闭了,我觉得这种行为是很草率的。这里我给大家彻底的解释一下,为什么会报 未认证,没有token
这个问题。
导致的原因:报这个问题的人大多数是未使用初始化脚本去配置,而是自己直接去改配置文件 .env
。
追问:那为什么没用过初始化脚本,就会报这个问题呢?
1、未通过初始化脚本初始配置项,系统没办法生成一条默认账号。这时候,我们通过简单的代码调试,就知道 mc_user
表缺数据,就会去添加数据。
2、面临的第二个问题就是,密码是加密后的,这是我们追源码,也很容易知道密码是
password_hash(md5($signatureString . $this->getSecret()), PASSWORD_BCRYPT);
这么来的。这也是官方,给的原因,说你密码错了,这个那个的。
3、你发现你的密码是对的,为什么还是报呢?继续追代码你会发现,token
其实是生成了,只是调用 /role/permissionByUser
报莫名其妙的错误 未认证,没有token
。这个错误极具误导性,让人以为是header中未携带token,其实好好的携带着呢。
追/role/permissionByUser
发现并没有进入这个方法,之前就被拦住了,报错了。那就是中间件的问题了。最终找到
mochat/api-server/app/Model/Traits/UserTrait.php
的 72 - 73行。有如下代码:
$redis = $container->get(Redis::class); $cacheData = $redis->get('mc:user.' . $id);
jwt这个组件,需要用到redis 去存储用户的信息,未连上报的错误。我想大多数的人,都是因为,并没有去连接redis也能启动,而忽略了。
感谢详尽的分析,这个问题已经列入了优化计划,打算对所有的错误提示信息进行进一步的完善并给出所有的错误码及提示可能产生的原因和对应解决方案,帮助大家更好的定位错误。