Skip to content

Instantly share code, notes, and snippets.

@zdenekdrahos
Last active April 30, 2016 13:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zdenekdrahos/3cf45fe60e333ac6d524e36b4ce2883b to your computer and use it in GitHub Desktop.
Save zdenekdrahos/3cf45fe60e333ac6d524e36b4ce2883b to your computer and use it in GitHub Desktop.
Redirect authenticated user on anonymous pages in Symfony - wrong solution
<?php
// app/AppKernel.php
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = array(
// ...
new App\MyUserBundle(),
);
// ...
}
// ...
}
<?php
// src/MyUserBundle/Controller/LoggedUserRedirection.php
namespace App\MyUserBundle\Controller;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
trait LoggedUserRedirection
{
protected function redirectInController($container)
{
return $this->redirectLoggedUser(
$container->get('security.authorization_checker'),
$container->get('router')
);
}
protected function redirectLoggedUser(AuthorizationCheckerInterface $security, RouterInterface $router)
{
if ($security->isGranted('IS_AUTHENTICATED_FULLY')) {
$url = $router->generate('homepage');
return new RedirectResponse($url);
}
}
}
<?php
// src/MyUserBundle/MyUserBundle.php
namespace App\MyUserBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class MyUserBundle extends Bundle
{
public function getParent()
{
return 'FOSUserBundle';
}
}
<?php
// src/MyUserBundle/DependencyInjection/MyUserExtension.php
namespace App\MyUserBundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
class MyUserExtension extends Extension
{
/** @SuppressWarnings(PHPMD.UnusedFormalParameter) */
public function load(array $configs, ContainerBuilder $container)
{
}
}
<?php
// src/AppBundle/Controller/RegistrationController.php
namespace AppBundle\Controller;
class RegistrationController extends BaseController
{
use \App\MyUserBundle\Controllerr\LoggedUserRedirection;
/**
* @SFW\Route("registration")
* @SFW\Template()
*/
public function registrationAction(Request $request)
{
$response = $this->redirectInController($this->container);
if ($response) {
return $response;
}
// default action
}
}
<?php
// src/MyUserBundle/Controller/ResettingController.php
namespace App\MyUserBundle\Controller;
use FOS\UserBundle\Controller\ResettingController as FosController;
class ResettingController extends FosController
{
use LoggedUserRedirection;
public function requestAction()
{
$response = $this->redirectInController($this->container);
if ($response) {
return $response;
}
return parent::requestAction();
}
}
<?php
// src/MyUserBundle/Controller/SecurityController.php
namespace App\MyUserBundle\Controller;
use Symfony\Component\HttpFoundation\Request;
use FOS\UserBundle\Controller\SecurityController as FosController;
class SecurityController extends FosController
{
use LoggedUserRedirection;
public function loginAction(Request $request)
{
$response = $this->redirectInController($this->container);
if ($response) {
return $response;
}
return parent::loginAction($request);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment