
https://github.com/lcobucci/jwt
比如这个库,其实有不少坑的,api 真的非常不友好,误导人,怎么办?
困扰 2 天的问题:
jwt token 的签发: $token= (new Builder())->....->getToken();这尼玛其实是个object,不是string,所以你必须用(string)$token得到最后的 token string;
jwt token signature 的验证:同样,官方文档里是这样的:var_dump($token->verify(...)),这个方法的搞笑地方在于,$token 是个object,如果客户端发送的是一个 token string,你怎么验证呢?
总之,这个沙雕文档能把你坑死了。
后来我只好参考了firebase php-jwt这个库的代码,用原生 PHP 函数,写了一个只针对RS256的验证方法。
前段时间我还问了一个问题:如果开源库有问题能不能骂?其实我个人认为是可以骂的,因为开源绝对不是开源库作者对别人的施舍,他有义务的。参考 ant design 圣诞地雷事件。
至于某些人说爱用用,不用滚,你就只配吃屎。
既然我把这个帖子发在分享创造这个节点,我还是希望大家能够访问我的博客,看一下具体内容: https://superphp.org/2018/375.html https://superphp.org/2019/378.html
这个库应用范围还是很广的,每月很多下载量,我觉得不止我一个人遇到类似的问题,希望对你有帮助。
1 feiyuanqiu 2019-01-06 04:53:21 +08:00 看了一下,觉得这个库的 API 挺好的,大概因为我是写 java 的吧... 「...这尼玛其实是个 object,不是 string,所以你必须用(string)$token 得到最后的 token string;」 接口里定义了 toString 方法,应该不算很隐蔽吧 https://github.com/lcobucci/jwt/blob/master/src/Token.php#L54 「...这个方法的搞笑地方在于,$token 是个 object,如果客户端发送的是一个 token string,你怎么验证呢? https://github.com/lcobucci/jwt/blob/3.2/README.md#parsing-from-strings 当然如果不符合你的使用习惯,可以自己再封装一下 |
2 nightcat 2019-01-06 04:59:20 +08:00 不要太冲动,先给项目发 issue 或者提交修复代码,如果作者不理会或者不接受再骂也不迟 |
3 ericgui OP @feiyuanqiu 这个__toString()是 PHP 特有的魔术方法,一般是自动触发,而不是类似 java 那种 someOb.toString()手动调用 parse 仅仅是解析 jwt token 的 header 和 payload,而是没法验证这个 token 是否是你签发的(验证签名)。 他的文档是有问题的 |
4 feiyuanqiu 2019-01-06 05:18:04 +08:00 via Android @ericgui 我写过 php,__toString 是个很基础的方法,说句冒犯的话,可能你需要再深入地看看 php 文档 通过 parse 方法,可以将字符串解析为 token 对象,之后就可以使用 verify 或 validate 方法做验证了。 你如果不喜欢这种面向对象的使用方式,完全可以将这个步骤封装为函数,或者向作者请求提供一份函数 facade |
6 ericgui OP @feiyuanqiu 你说的对。所以我发现这个面向对象思想还是我欠缺的。 |
7 ericgui OP @feiyuanqiu 不过老兄,这文档确实有问题,哎,不说了,反正挺痛苦。 |
9 gouchaoer 2019-01-06 10:40:27 +08:00 via Android 保证 IDE 有 typehint,然后 xdebug 单步调试就嗖嗖的写业务吧 |
10 iyaozhen 2019-01-06 11:33:57 +08:00 via Android 老哥,你这是没写过 JAVA 呀,JAVA 面向对象比这更严重 |
11 zn 2019-01-06 11:43:52 +08:00 via iPhone 楼主你这是没怎么用过面向对象编程方式,大部分时间都在写意大利面条式代码吧。 |