Что сказал Мик, это правда. Для наблюдения за (переопределение службы), читайте дальше.
В app/config/services.yml
, добавьте следующее:
services:
fos_oauth_server.controller.token:
class: OAuth2Bundle\Controller\TokenController
arguments: [@fos_oauth_server.server]
Где OAuth2Bundle\Controller\TokenController
ваш пользовательский контроллер расширения одного из пучка FOS.
Например:
namespace OAuth2Bundle\Controller;
use FOS\OAuthServerBundle\Controller\TokenController as BaseController;
use OAuth2\OAuth2;
use Symfony\Component\HttpFoundation\Request;
class TokenController extends BaseController {
public function tokenAction(Request $request)
{
// Do whatever you like here
$result = parent::tokenAction($request);
// More custom code.
return $result;
}
}
Конечно, вы можете делать все, что вам нравится с $result
. Вы можете даже опустить вызов parent::
и выполнить свою собственную аутентификацию, чтобы вернуть токен.
EDIT
Это является продолжением на вышесказанном. Мне приходилось обращаться к некоторым объектам и делать некоторые обновления, когда пользователь получал токен. Это потребовало от меня доступа к диспетчеру сущности. В моем случае я должен был проверить, активен ли клиент OAuth; он не удаляется, а временно отключается, чтобы заблокировать группу пользователей.
Поскольку контроллер является услугой, вы можете добавить дополнительные параметры, такие как менеджер объекта:
Определение службы теперь выглядит следующим образом:
fos_oauth_server.controller.token:
class: ApiBundle\Controller\OAuth\TokenController
arguments: [@fos_oauth_server.server, @doctrine.orm.entity_manager]
И конечно контроллер теперь имеет конструктор.Теперь это выглядит так:
namespace OAuth2Bundle\Controller;
use Doctrine\ORM\EntityManager;
use FOS\OAuthServerBundle\Controller\TokenController as BaseController;
use OAuth2\OAuth2;
use Symfony\Component\HttpFoundation\Request;
class TokenController extends BaseController {
/**
* @var EntityManager
*/
private $em;
/**
* @param OAuth2 $server
*/
public function __construct(OAuth2 $server, EntityManager $entityManager)
{
parent::__construct($server);
$this->em = $entityManager;
}
public function tokenAction(Request $request)
{
// Do whatever you like here
$result = parent::tokenAction($request);
// More custom code.
return $result;
}
}
Как вы переопределите oauth.xml? – Jeboy
См. [Как переопределить любую часть пакета] (http://symfony.com/doc/current/cookbook/bundles/override.html) – Mick