私は安らかなAPIを実装しました。 そして、私はセッション処理に問題があります。 セッションがタイムアウトすると、ユーザーはページを更新して$ this-> getUser()が空で500エラーが発生し、このエンドポイントのユーザーデータを記録する必要があります。 これではなく、ユーザーがページをリフレッシュしてセッションが終了したときに、403エラーが表示されたり、URLにリダイレクトされたりします。 どうすればいいですか? カーネルリスナーを使うべきですが、セッションをチェックする方法はすでに期限切れですか?多分security.ymlを変更するだけの解決策がありますか?symfonyセッションの有効期限が切れた後にログインページにリダイレクト
私はjms/di-extra-bundleを使用していることを忘れてしまったので、コントローラに管理者を注入します。これらのマネージャーはコントローラーアクションの前に実行されるので、ユーザーがコントローラーではなくマネージャーにログインしているかどうかを確認する必要があります。私はすべてのマネージャーの行動にコードを複製したくないのですが、どのようにすればよりエレガントな方法で対応できますか?
私は例えば、*カーネルでアクションをリスナーを使用しようとしました:
class KernelListener
{
private $tokenStorage;
public function __construct(TokenStorageInterface $tokenStorage)
{
$this->tokenStorage = $tokenStorage;
}
public function onKernelRequest(GetResponseEvent $event)
{
$kernel = $event->getKernel();
$request = $event->getRequest();
$user = $this->tokenStorage->getToken()->getUser();
if(!$user instanceof SempUser || $user == null) {
throw new AccessDeniedException();
}
}
public function onKernelResponse(FilterResponseEvent $event)
{
$response = $event->getResponse();
$request = $event->getRequest();
$kernel = $event->getKernel();
$user = $this->tokenStorage->getToken()->getUser();
if(!$user instanceof SempUser || $user == null) {
throw new AccessDeniedException();
}
}
public function onKernelException(GetResponseForExceptionEvent $event)
{
$user = $this->tokenStorage->getToken()->getUser();
if(!$user instanceof SempUser || $user == null) {
throw new AccessDeniedException();
}
}
}
そして、私のservices.yml:
kernel.listener:
class: AppBundle\Listener\KernelListener
arguments: ["@security.token_storage"]
tags:
- { name: kernel.event_listener, event: kernel.exception }
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
- { name: kernel.event_listener, event: kernel.response, method: onKernelResponse }
しかし、それは動作しません...
あなたがこれまでに試してみましたか?私たちといくつかのコードを共有できますか?多分このリンクはあなたを助けるでしょうhttp://symfony.com/doc/current/components/security/authentication.html –
こんにちは、私はいくつかのサンプルコードを含んでいます。 – r3m4k3