记一次laravel和hyperf的JWT认证兼容

背景:现有的一个 laravel10 的API项目,其中一个高频接口需要实时请求第三方接口,基于性能和异步非阻塞的需求,计划将该接口迁移到 hyperf3.1 上,其中用户认证部分用到的是 tymon/jwt-auth ,需要实现 jwt 共用,laravel10 生成的 jwt 在 hyperf 中通过验证。

解决流程:

  1. 秉着不重复制造轮子的原则,直接利用hyperf现有的权限认证组件。这些组件基本上都是基于 laravel auth 实现的,相信应该可以直接套用。

  2. 第一次尝试使用 hyperf-ext/jwt
    发现问题:当前组件并未兼容 hyperf3.0+
    解决办法:放弃使用。

  3. 换一个组件 96qbhy/hyperf-auth
    发现问题:一顿操作下来发现未能成功获取 user 。经过调试发现 jwt payload 中用于标记 uid 的字段是 uid , 而 tymon/jwt-auth 用的是 sub。详见 JwtGuard@user
    解决办法:放弃使用。

  4. hyperf-ext/jwt 的 issues 上发现别人迁移兼容 hyperf3.0 的库 hyperf-extension/jwt 。直接用!
    发现问题:继续一顿操作下来获得 [ERROR] Token Signature could not be verified. ,接着各种调试排查下来发现是里面对 JWT_SECRET 的处理逻辑两边不一样导致。 hyperf-ext/jwtJWT_SECRET 额外做了 base64_decode 处理。详见 ManagerFactory@resolveCodec
    解决办法:env 配置文件还是使用相同的 JWT_SECRETconfig/jwt.php 中对 secret 进行 base64_encode.

    'secret' => base64_encode(env('JWT_SECRET'))

    小结:
    hyperf 的生态跟 laralvel 比还是差距比较大。(laravel :cow: :beer:)

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 4

我们以前也是这么做的

2周前 评论
kwok_wah (楼主) 2周前

要是能无缝使用,就太炸裂了。不过还好迁移不难

2周前 评论

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