मुझे एक समस्या है जब मैं स्लिम 4 में पिछले मिडलवेयर में एक विशेषता सेट प्राप्त करने का प्रयास करता हूं।

मैं ऐप/मिडलवेयर.php में मिडलवेयर का उपयोग करता हूं
मैं एक टोकन की जांच के लिए JwtAuthentication मिडलवेयर का उपयोग करता हूं और मैं डिकोड किए गए टोकन को अगले मिडलवेयर में पास करना चाहता हूं: CheckTokenInDatabaseMiddleware।

मैंने डिकोड किए गए टोकन के साथ $request वापस कर दी: return $response->withAttribute("decoded", $arguments['decoded']);

CheckTokenInDatabaseMiddleware में $request->getAttribute('decoded') NULL लौटाता है

मेरे पास एक पतला-कंकाल है और इसका उपयोग करें:

ऐप/मिडलवेयर.php

declare(strict_types=1);

use App\Application\Middleware\CheckTokenInDatabaseMiddleware;
use App\Application\Middleware\SessionMiddleware;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\App;
use Tuupola\Middleware\JwtAuthentication;

return function (App $app) {
    $app->add(SessionMiddleware::class);
    $app->add(new JwtAuthentication([
        "ignore" => ['/auth/signin', '/auth/signout'],
        'path' => ['/auth/me'],
        'secret' => getenv('JWT_SECRET'),
        "before" => function (Request $request, $arguments) {
            return $request->withAttribute("decoded", $arguments["decoded"]);
        }
    ]));
    $app->add(CheckTokenInDatabaseMiddleware::class);
};

एप्लिकेशन/एप्लिकेशन/मिडलवेयर/चेकटोकनइनडेटाबेस मिडलवेयर.php

declare(strict_types=1);

namespace App\Application\Middleware;

use App\Domain\User\UserRepository;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Server\MiddlewareInterface as Middleware;
use Psr\Http\Server\RequestHandlerInterface as RequestHandler;

class CheckTokenInDatabaseMiddleware implements Middleware
{
    protected $userRepository;

    /**
     * {@inheritdoc}
     */
    public function process(Request $request, RequestHandler $handler): Response
    {
        $token = $request->getAttribute('decoded');

        var_dump($token); // returns NULL
        die();

        return $handler->handle($request);
    }

    public function __construct(UserRepository $userRepository)
    {
        $this->userRepository = $userRepository;
    }
}
2
Patrice Flao 3 पद 2019, 16:29

1 उत्तर

मुझे जवाब मिल गया।
स्लिम मिडलवेयर में आपको याद रखना होगा कि यह FILO है। इसलिए यदि आप मिडलवेयर ए से मिडलवेयर बी में एक विशेषता पास करना चाहते हैं तो आपको उन्हें उल्टे क्रम में रखना होगा जो है:

ऐप/मिडलवेयर.php

...
return function (App $app) {
    $app->add(BMiddleware::class);
    $app->add(AMiddleware::class);
};
1
Patrice Flao 3 पद 2019, 16:50