Php JWT 401:在Slim 3框架中未经授权

Php JWT 401:在Slim 3框架中未经授权,php,json,authentication,jwt,slim,Php,Json,Authentication,Jwt,Slim,他们说,这是我第一次使用slim 3框架框架项目 还有一个框架项目,它将为您提供一个示例应用程序的快速启动,因此如果您愿意,可以使用它 工作而不是探索所有运动部件是如何工作的 工作 在现实生活中,很难整合 我试图在教程中一步一步地学习,但仍然不起作用。 请帮帮我 这是我的密码 middleware.php 我的路线呢 routes.php 但结果如下图401:未经授权 您误解了参数secret。它不是令牌的。这是您用来签署令牌的密钥 如何生成令牌取决于您。例如,有一个例子。您还可以使用PHP生成

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

还有一个框架项目,它将为您提供一个示例应用程序的快速启动,因此如果您愿意,可以使用它 工作而不是探索所有运动部件是如何工作的 工作

在现实生活中,很难整合

我试图在教程中一步一步地学习,但仍然不起作用。 请帮帮我

这是我的密码

middleware.php

我的路线呢

routes.php

但结果如下图401:未经授权


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

如何生成令牌取决于您。例如,有一个例子。您还可以使用PHP生成令牌

use Firebase\JWT\JWT;

$payload = [
    "sub" => "user@example.com"
];
$token = JWT::encode($payload, "thisissecret", "HS256");
在使用JWT之前,最好先阅读这篇文章。

1。生成令牌 使用

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

RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
3.中间件 4.正确的要求

5.错误的令牌请求


如果您使用的是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"
$payload = [
    "sub" => "user@example.com"
];
    $token = JWT::encode($payload,'JWT-secret-key');
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
$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));
    }
]));
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"