【问题标题】:I'm transitioning my API from slim-3 to slim-4 and I'm struggling to figure out how to add JWT to the middleware我正在将我的 API 从 slim-3 转换为 slim-4,我正在努力弄清楚如何将 JWT 添加到中间件
【发布时间】:2021-05-03 02:36:43
【问题描述】:

我正在使用 composer 来安装 slim-skeleton。那些内置的路线按预期工作。我了解如何添加我以前的路由和数据库连接,但我一直在为如何添加任何 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 库,如果有人有他们喜欢的并且运行良好的库,我只需要一些指导,因为我觉得缺少所有文档。

【问题讨论】:

    标签: php jwt slim-4


    【解决方案1】:
          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 一起使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多