error500
@error500
PHP-developer

Как осуществить авторизацию Symfony2 + FOSUserBundle?

Здравствуйте. Хотелось бы узнать, можно ли переопределить авторизацию FOSUserBundle, нужно сделать авторизацию не по двум полям (логин/пароль) а по трем (не email), для дальнейшего применения ACL, перечитал кучу документации и форумов, ничего подходящего не нашел, может, кто-то сталкивался уже с такой задачей или подскажет, в какую сторону копать? Ввиду сложности ядра Symfony 2 тяжеловато самому разобраться с этим.
  • Вопрос задан
  • 4383 просмотра
Решения вопроса 1
error500
@error500 Автор вопроса
PHP-developer
Если кому интересно - запостил на stackoverflow
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
benbor
@benbor
Помог ответ - не забудь лайкнуть
Да можно, если в кратце то symfony.com/doc/current/cookbook/bundles/inheritan...

Я решал эту проблему, наследуя свой бандл от FOSUserBundle:
class MyUserBundle extends Symfony\Component\HttpKernel\Bundle\Bundle
{
    public function getParent()
    {
        return 'FOSUserBundle';
    }
}

после чего,
namespace MyUserBundle\Controller;

use FOS\UserBundle\Controller\SecurityController as ParentSecurityController;
use Symfony\Component\HttpFoundation\RedirectResponse;

class SecurityController extends ParentSecurityController
{

    public function loginAction()
    {
        if (!$this->container->get('security.context')->isGranted('IS_AUTHENTICATED_ANONYMOUSLY'))
        {
            return new RedirectResponse('/');
        }

        return parent::loginAction();
    }

строка parent::loginAction() передает управление FOSUserBundle, но вы можете это не делать, а реализовать свою версию.
Ответ написан
Комментировать
@Alenija
Тогда уже:

namespace MyUserBundle\Controller;

use FOS\UserBundle\Controller\SecurityController as ParentSecurityController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;

class SecurityController extends ParentSecurityController
{

    public function loginAction(Request $request)
    {
        if (!$this->container->get('security.context')->isGranted('IS_AUTHENTICATED_ANONYMOUSLY'))
        {
            return new RedirectResponse('/');
        }

        return parent::loginAction($request);
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы