调用 http://larabbs.test/API/user 接口时报 401 错误的"解决思路"
出现报错请求的时候我很慌... 懵逼了, 看了教程底下的好几个相关的问答都没解决问题...大半个小时候后终于解决了.
在这里分享一下解决的重要点:
- 通过 command 或 登陆接口 拿到 token
- 网上随便找个 base64 解码的, 查看其中的内容是否正常
我是在上面步骤2中发现其中数据有异常, 如下图
payload 中的 sub
值竟然是 null, 这么一看, 问题出现 token 的生成上的.
开始排查:
Commands\GenerateToken.php
public function handle() { ... $this->info(\Auth::guard('api')->setTTL($ttl)->fromUser($user)); }
从此处生成 token 开始跟进
...\vendor\tymon\jwt-auth\src\JWT.php
public function makePayload(JWTSubject $subject) { \Log::info($this->getClaimsArray($subject)); return $this->factory()->customClaims($this->getClaimsArray($subject))->make(); }
这时候开始打日志查看情况了...
[2018-09-03 22:56:21] local.INFO: array ( 'sub' => NULL, 'prv' => '23bd5c8949f600adb39e701c400872db7a5976f7', )
这时候突然想到,
sub
指的不就是用户识别号嘛...去User
model 一看, 果然是代码写错了public function getJWTIdentifier() { $this->getKey(); }
↑ 次数没有加上 return...
崩溃..加上return后, 测试通过.
感觉还是要靠细心, 不然浪费的时间太没必要了.
高认可度评论:
报错了,看看源码,调试一下,不是更熟悉jwt了吗,比做完了一脸懵逼强多了
报错了,看看源码,调试一下,不是更熟悉jwt了吗,比做完了一脸懵逼强多了