私はSymfony 2.7プロジェクトに取り組んでいます。セッションが切れると、特定のページでユーザーをリダイレクトしたいと思います。 役割とルートを確認するリスナーを作成しました。ユーザーが認証されずに認証済みルートにアクセスしようとすると、特定のページにリダイレクトされます。 ホームページへのデフォルトのリダイレクトが優先されるため、これは現時点では機能していません。symfonyは、セッションが終了したときのデフォルトのリダイレクトを防止します。
これはリスナーです:
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\Routing\Router;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
はsymfony \コンポーネント\セキュリティ\コア\認証\ AuthorizationCheckerを使用します。
class UserDisconnectionListener
{
protected $router;
protected $security;
protected $tokenStorage;
public function __construct(Router $router, AuthorizationChecker $security, TokenStorage $tokenStorage)
{
$this->router = $router;
$this->security = $security;
$this->tokenStorage = $tokenStorage;
}
public function onKernelRequest(GetResponseEvent $event)
{
$request = $event->getRequest();
$loggedRoutes = ['user_account', 'user_index', '...'];
$url = '';
if($this->tokenStorage->getToken() !== null) {
if(!$this->security->isGranted('IS_AUTHENTICATED_OPENID')) {
if (in_array($request->get('_route'), $loggedRoutes)) {
$url = $this->router->generate('disconnection_route');
}
}
if(strlen($url) > 0) {
$response = new RedirectResponse($url);
$event->setResponse($response);
}
}
}
}
app.userroute.listener:
class: app\UserBundle\Listener\UserDisconnectionListener
arguments: ['@router.default', @security.authorization_checker, @security.token_storage]
scope: request
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
もっと良い方法がありますか? 優先度タグを使用しようとしましたが、優先度は設定されていません。 ログに記録しようとしましたが、 'user_index'のルートにアクセスしようとしたときに、私のlisternerログに、私はすでにホームページのgeneral_indexルートにリダイレクトされていました。
PS:私はFOSUserBundleとOpenIDバンドルを組み合わせて使用しています。
この投稿をお読みください。https://stackoverflow.com/questions/22232587/how-to-auto-redirect-a-user-in-symfony-after -a-session-time-out。 「IS_AUTHENTICATED_OPENID」とは何ですか? – Mcsky
私がそれをうまく理解すれば、 '' '' ''はページを更新し、 '' SessionIdleHandler'''はユーザーがまだログ彼がいない場合はリダイレクトしてください –
IS_AUTHENTICATED_OPENIDは、ユーザーが認証されたことを意味する役割です。 –