Я пытаюсь получить https://github.com/zfcampus/zf-oauth2, работая с моим приложением (в основном потому, что у меня установлена apigility, и zf-oauth2 приходит с ним).
Я читаю последний раздел, и он говорит, чтобы защитить, я просто использую следующий код (например, наверху контроллера):
if (!$this->server->verifyResourceRequest(OAuth2Request::createFromGlobals())) { // Not authorized return 401 error $this->getResponse()->setStatusCode(401); return; } // where $this->server is an instance of OAuth2\Server (see the AuthController.php).
Однако $ this-> сервер должен быть каким-то образом введен. Но я не могу найти, как и что вводить. Нажимая на ссылку, чтобы увидеть AuthController.php, я получаю доступную страницу …
Редактировать: спасибо Тому и Уджвалю, я думаю, что я на один шаг ближе.
В моем контроллере теперь у меня есть следующее:
use ZF\OAuth2\Controller\AuthController; class BaseController extends AuthController { }
В моем Module.php я пытаюсь ввести OAuth2Server как таковой:
public function getServiceConfig() { return array( 'factories' => array( '\Stand\Controller\BaseController' => function ($sm) { $cls = new BaseController($sm->get('ZF\OAuth2\Service\OAuth2Server')); return $cls; }, ) ); }
Но, когда я пытался отобразить страницу, она не заразила меня инъекцией. я получил
Допустимая фатальная ошибка: аргумент 1 передан в ZF \ OAuth2 \ Controller \ AuthController :: __ construct () должен быть экземпляром OAuth2 \ Server
Пожалуйста посоветуй!
благодаря
Вы можете создать завод таким образом:
module.config.php
<?php return array( 'controllers' => array( 'factories' => array( 'Test\Controller\Test' => function($sm) { $locator = $sm->getServiceLocator(); $server = $locator->get('ZF\OAuth2\Service\OAuth2Server'); $provider = $locator->get('ZF\OAuth2\Provider\UserId'); return new Test\Controller\TestController($server, $provider); } ) ), ...
И тогда вы можете использовать его в своем классе контроллера:
<?php namespace Test\Controller; use ZF\OAuth2\Controller\AuthController; use ZF\OAuth2\Provider\UserId\UserIdProviderInterface; use Zend\View\Model\JsonModel class TestController extends AuthController { public function __construct($serverFactory, UserIdProviderInterface $userIdProvider) { parent::__construct($serverFactory, $userIdProvider); } public function indexAction() { $server = call_user_func($this->serverFactory, "oauth"); if (! $server->verifyResourceRequest($this->getOAuth2Request())) { $response = $server->getResponse(); return $this->getApiProblemResponse($response); } return new JsonModel(array("Hello" => "World!")); } }
Ссылка: https://framework.zend.com/manual/2.1/ru/modules/zend.service-manager.quick-start.html