【问题标题】:JWT 401: Unauthorized in Slim 3 frameworkJWT 401:在 Slim 3 框架中未经授权
【发布时间】:2017-03-02 07:16:05
【问题描述】:

他们说这是我第一次使用 slim 3 框架骨架项目

还有一个框架项目,它可以为您提供示例应用程序的快速入门,因此,如果您想拥有它,请使用它 一些工作,而不是探索所有运动部件是如何工作的 工作。

在现实生活中很难融入JSON Web Token Authentication Middleware

我尝试按照教程中的步骤进行操作,但仍然无法正常工作。 请帮帮我?

这是我的代码

中间件.php

$app->add(new \Slim\Middleware\JwtAuthentication([
  "path" => "/",
  "passthrough" => "/test",
  "secret" => "thisissecret"
]));

还有我的/路线

routes.php

$app->get('/',App\MemberController::class);

但结果如下图,401: Unauthorized

【问题讨论】:

    标签: php json authentication jwt slim


    【解决方案1】:

    您误解了参数secret。它是不是令牌。它是您用来签署令牌的密钥

    如何生成令牌由您决定。例如有一个online tool。您也可以使用 PHP 生成令牌。

    use Firebase\JWT\JWT;
    
    $payload = [
        "sub" => "user@example.com"
    ];
    $token = JWT::encode($payload, "thisissecret", "HS256");
    

    在使用 JWT 之前,最好阅读此introduction

    【讨论】:

      【解决方案2】:

      1。生成令牌

      使用firebase/php-jwt

      $payload = [
          "sub" => "user@example.com"
      ];
          $token = JWT::encode($payload,'JWT-secret-key');
      

      2。 .htaccess 更改

      如果使用 Apache,请将以下内容添加到 .htaccess 文件中。否则 PHP 将无法访问 Authorization: Bearer header

      RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
      

      3。中间件

      $app->add(new \Slim\Middleware\JwtAuthentication([
          "path" => "/api",
          "passthrough" => ["/test"],
          "secret" => "JWT-secret-key",
          "secure" => false,
          "callback" => function ($request, $response, $arguments) use ($container) {
              $container["jwt"] = $arguments["decoded"];
          },
          "error" => function ($request, $response, $arguments) {
              $data["status"] = "0";
              $data["message"] = $arguments["message"];
              $data["data"] = "";
              return $response
              ->withHeader("Content-Type", "application/json")
              ->write(json_encode($data, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT));
          }
      ]));
      

      4。正确的请求

      5。错误的令牌请求

      Reference Link

      【讨论】:

        【解决方案3】:

        如果您使用 apache 服务器并通过 https 协议提供服务,那么您的 .htaccess 文件看起来像

        RewriteEngine On
        RewriteCond %{HTTPS} On
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
        RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ index.php [L,QSA]
        
        # Set the headers for the restful api
        Header always set Access-Control-Allow-Origin "*"
        Header always set Access-Control-Max-Age "1000"
        Header always set Access-Control-Allow-Headers "X-Requested-With, Content-Type, Accept, Origin, Authorization"
        Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT, PATCH"
        

        【讨论】:

          猜你喜欢
          • 2018-06-06
          • 2021-09-21
          • 2018-02-04
          • 1970-01-01
          • 2018-04-08
          • 2017-10-18
          • 1970-01-01
          • 2018-05-19
          • 2020-08-08
          相关资源
          最近更新 更多