Skip to content

Instantly share code, notes, and snippets.

@batazo
Last active June 13, 2021 18:11
Show Gist options
  • Select an option

  • Save batazo/563b4765a7156aa915dc2fd06541a4fe to your computer and use it in GitHub Desktop.

Select an option

Save batazo/563b4765a7156aa915dc2fd06541a4fe to your computer and use it in GitHub Desktop.
Slim 4 - Authentication middleware
<?php
use \App\Controllers\Tests;
use \App\Middleware;
$app->get('/tests/testroute/{name}', Tests\newTestController::class . ':getT')->add(new Middleware\testMiddleware());
<?php
namespace App\Controllers\Tests;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
//use Slim\Psr7\Response;
use Slim\Views\PhpRenderer;
public function getT(Request $request, Response $response, $args) {
$name = $args['name'];
$data = Array(
'Access' => $request->getAttribute('Access'),
'UserDatas' => $request->getAttribute('UserDatas')
);
$templateVariables = [
'data' => $data
];
$renderer = new PhpRenderer('../private/src/Views', $templateVariables);
return $renderer->render($response, "jsonView.php", $args);
}
}
<?php
namespace App\Middleware;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Server\RequestHandlerInterface as RequestHandler;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Server\MiddlewareInterface;
use Slim\Psr7\Response;
use Slim\Views\PhpRenderer;
//use Slim\Routing\RouteContext;
//Test middleware Class
class testMiddleware
{
public function __invoke(Request $request, RequestHandler $handler): ResponseInterface
{
$response = new Response();
if($request->getUri()->getPath() === '/tests/testroute/PASSW'){
$userdatas = Array(
'id' => 100,
'UserName' => 'DummyUser',
'UserAvatar' => null
);
$request = $request->withAttribute('Access', 'Allowed');
$request = $request->withAttribute('UserDatas', $userdatas);
return $handler->handle($request);
} else {
$data = Array(
'Access' => 'DENIED',
'UserDatas' => 'DENIED'
);
$data = json_encode($data);
$response->getBody()->write($data);
$response = $response->withHeader('Content-Type', 'application/json')
->withStatus(401);
//Template handler version:
//$templateVariables = [
// 'data' => $data
//];
//$renderer = new PhpRenderer('../private/src/Views', $templateVariables);
//return $renderer->render($response->withStatus(401), "jsonView.php");
}
return $response;
}
}
<?php
echo json_encode($data, JSON_PRETTY_PRINT);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment