我正在使用SlimFramework和JWT通过登录名和密码处理基于令牌的身份验证。
我设法登录并发送令牌作为回应。
这是我的代码:
<?php
require_once("vendor/autoload.php");
$app = new \Slim\Slim();
$app->add(new \Slim\Middleware\ContentTypes());
$app->post('/auth/login', function () use ($app) {
$params = $app->request()->getBody();
if ($params['email'] == "login" && $params['password'] == "password") {
$key = "example_key";
$token = array(
"id" => "1",
"exp" => time() + (60 * 60 * 24)
);
$jwt = JWT::encode($token, $key);
$app->response->headers->set('Content-Type', 'application/json');
echo json_encode(array("token" => $jwt));
}
});
$app->get("/user", function () {
echo "ok";
});
$app->run();
/user
路径中的令牌?
发出/user
请求我正在使用Authorization:Bearer eHrR....
答案 0 :(得分:4)
您可以使用JSON Web Token Authentication middleware。使用composer安装最新版本。
$ composer require tuupola/slim-jwt-auth
同时将以下内容添加到.htaccess file
。否则PHP将无法访问Authorization: Bearer
标题。
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
然后将中间件添加到Slim应用程序中。请求时,中间件会尝试验证和解码令牌。如果未找到令牌,则服务器将使用401 Unauthorized
进行响应。如果令牌存在但验证和解码时出错,则服务器将以400 Bad Request
响应。
在回调函数中,中间件将令牌的内容存储到$app->jwt
。您可以稍后在其他路线中访问它。
$app = new \Slim\Slim();
$app->add(new \Slim\Middleware\JwtAuthentication([
"secret" => "your_example_key",
"callback" => function ($options) use ($app) {
$app->jwt = $options["decoded"];
}
]));
$app->get("/user", function () {
print_r($app->jwt);
});
$app->run();