首页 > 解决方案 > 我正在将我的 API 从 slim-3 转换为 slim-4,我正在努力弄清楚如何将 JWT 添加到中间件

问题描述

我正在使用作曲家来安装超薄骨架。那些内置的路线按预期工作。我了解如何添加我以前的路由和数据库连接,但我一直在为如何添加任何 JWT 库而苦苦挣扎。我搜索了又搜索,但没有找到太多关于 Slim-4 的文档,而且我尝试过的东西似乎总是以某种方式失败。

因此,例如,我使用 composer 安装tuupola/slim-jwt-auth,它说要添加以下代码:

$app = new Slim\App;

$app->add(new Tuupola\Middleware\JwtAuthentication([
    "secret" => "supersecretkeyyoushouldnotcommittogithub"
]));

但是我在哪里或如何将它添加到中间件?是否需要添加到 app/middleware.php 中?我阅读的所有文档都具有与其他目录和其他目录完全不同的文件结构。一旦将其放置在正确的位置,看起来就像在没有令牌的情况下发出请求时,我应该得到 401 Unauthorized 响应。

在那部分工作之后,我知道我需要创建一个路由来获取我的访问令牌,但是我在这个库中没有看到任何关于它的内容,所以我假设我需要另一个库来编码我的令牌并从我的请求中返回它。

一旦我真正得到一个令牌响应并将其传递到我的实际请求路由的标头中,我会假设我会执行以下操作

$app->get("/protected-route-name", function ($request, $response, $arguments) {
    $token = $request->getAttribute("token");
    // Not sure what to put next to verify the token and allow the response or display a error if there is no token or the token in invalid.

});

如果有人有他们喜欢的并且运行良好的库,我对 firebase 或任何 JWT 库持开放态度,我只需要一些指导,因为我觉得缺少所有文档。

标签: phpjwtslim-4

解决方案


      use \Firebase\JWT\JWT;

获取令牌

       $headers = apache_request_headers();
         if(isset($headers['Authorization'])){
    $decoded = JWT::decode($headers['Authorization'], $publicKey, array("RS256"));
    .... verify token.
    }

    $jwt = JWT::encode($payload, $privateKey, "RS256");

繁荣完成。

你甚至不需要使用中间件来做到这一点。slim 让自己变得过于复杂。但事实是在 slim3 和 slim 4 之间,在一个非常基本的设置上,唯一改变的是 json 写入上的 getBody()。

老实说,老实说,我不确定这有多大用处。现在一切都是基于云的。我发现这一点的唯一原因是试图弄清楚如何将 Google Identity Platform 与 Slim 一起使用。


推荐阅读