我正在将我的 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 库,如果有人有他们喜欢的库并且效果很好,我只需要一些指导,因为我觉得缺少所有文档。

解决方法

      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");

繁荣完成。

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...