Токен доступа Symfony HWIOAuthBundle

Мне нужно получить токен доступа в социальной сети, например github. Логика заключается в том, что когда мой пользователь аутентификации входит в профиль, он может нажать кнопку и подтвердить учетную запись в социальной сети, и в этой ситуации мне нужен токен доступа к токену доступа oauth. У меня стандартная регистрация и аутентификация, и мне нужно только получить токен доступа и установить его в БД.

Я устанавливаю бандл, записываю в ядро

"hwi/oauth-bundle": "0.4.*@dev"
new HWI\Bundle\OAuthBundle\HWIOAuthBundle(),

моя конфигурация:

hwi_oauth:
connect:
  account_connector: app.provider.user_provider

firewall_name: secured_area

resource_owners:
    github:
        type:                github
        client_id:           "%github_app_id%"
        client_secret:       "%github_app_secret%"
        scope:              "user,public_repo"

и моя маршрутизация:

hwi_oauth_redirect:
resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml"
prefix:   /connect

hwi_oauth_login:
resource: "@HWIOAuthBundle/Resources/config/routing/login.xml"
prefix:   /login

github_login:
path: /login/check-github

и маршрут в комплекте

hwi_oauth_security:
resource: "@HWIOAuthBundle/Resources/config/routing/login.xml"
prefix: /login

hwi_oauth_connect:
resource: "@HWIOAuthBundle/Resources/config/routing/connect.xml"
prefix: /login

hwi_oauth_redirect:
resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml"
prefix:   /login

и моя безопасность:

firewalls:
        secured_area:
        anonymous: ~
        oauth:
            resource_owners:
                github:          "/login/check-github"
            login_path:        /login
            use_forward:       false
            failure_path:      /login

            oauth_user_provider:
                service: app.provider.user_provider

и конфиг для сервиса:

<parameters>
        <parameter key="my_user_provider.class">Artel\ProfileBundle\Providers\UserProvider</parameter>
</parameters>

        <service id="app.provider.user_provider" class="%my_user_provider.class%">

        <argument type="collection">
            <argument key="github">githubId</argument>
        </argument>

        <call method="setGithubProvider">
            <argument type="service" id="geekhub.user.github_provider" />
        </call>

    </service>

class UserProvider implements OAuthAwareUserProviderInterface
{
/**
 * {@inheritDoc}
 */
public function connect(UserInterface $user, UserResponseInterface $response)
{
   //I think this I get access token in request
}

/**
 * {@inheritdoc}
 */
public function loadUserByOAuthUserResponse(UserResponseInterface $response)
{
}

и в шаблоне

 <a class="logo" href="{{ path('hwi_oauth_service_redirect', {'service' : 'github'}) }}">Gh</a>

но у меня ошибка

Unable to generate a URL for the named route "hwi_oauth_connect_service" as such route does not exist.

куча

in app/cache/dev/appDevUrlGenerator.php at line 259   -
public function generate($name, $parameters = array(), $referenceType = self::ABSOLUTE_PATH)
{
    if (!isset(self::$declaredRoutes[$name])) {
        throw new RouteNotFoundException(sprintf('Unable to generate a URL for the named route "%s" as such route does not exist.', $name));
    }
    list($variables, $defaults, $requirements, $tokens, $hostTokens, $requiredSchemes) = self::$declaredRoutes[$name];

Как я могу просто получить токен?

РЕШЕНО

когда я добавляю routkng в пакетную маршрутизацию, я решил эту проблему

hwi_oauth_security:
resource: "@HWIOAuthBundle/Resources/config/routing/login.xml"
prefix: /login

hwi_oauth_connect:
resource: "@HWIOAuthBundle/Resources/config/routing/connect.xml"
prefix: /login

hwi_oauth_redirect:
resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml"
prefix:   /login

Но теперь у меня есть другой, когда я подключаюсь к git hub, я вхожу в маршрут в действии hwi_oauth_connect_service: connectServiceAction и имею стандартный шаблон, как перезагрузить этот контроллер и действие и изменить шаблон ?? Или как после сервиса app.provider.user_provider сделать редирект в моем роутинге?


person shuba.ivan    schedule 27.01.2016    source источник
comment
Раньше пробовал этот комплект. На мой взгляд, эта связка могла бы быть полезной, но реализовать социальный функционал без нее не так сложно - слишком много кода и, насколько я помню, максимальное количество запросов на вход пользователя через sn было 3 (ok.ru oauth реализация), поэтому мы решили написать небольшой кусок кода вместо использования этого бандла (но у нас уже есть жрать в проекте - так что этот вариант нам был проще).   -  person Ilya Yarkovets    schedule 28.01.2016
comment
я обновляю свой вопрос   -  person shuba.ivan    schedule 01.02.2016
comment
Чтобы получить токен, вы должны правильно настроить свою сеть и просмотреть URL-адрес входа, вы будете перенаправлены в сеть для предоставления доступа и обратно в свое приложение с ответом, содержащим токен и всю другую информацию о вашем пользователе. В вашем security.yml измените свой resource_owner с «my_gihub» на «github».   -  person chalasr    schedule 02.02.2016
comment
Готово. Теперь есть - невозможно сгенерировать URL-адрес для именованного маршрута hwi_oauth_connect_service, поскольку такой маршрут не существует.   -  person shuba.ivan    schedule 02.02.2016


Ответы (1)


Очень хороший пример реализации HWIOAuthBundle с FOSUserBundle https://gist.github.com/danvbe/4476697

ИЗМЕНИТЬ

HWIOAuthBundle — это пакет для OAuth, который предоставляет отличную документацию для его настройки/использования.

Во-первых, вы должны установить брандмауэр, на котором будет использоваться HWIOAuth. Он должен быть таким же, как ваш

Затем вы должны зарегистрировать свое приложение Symfony2 в социальной сети, к которой вы хотите подключать своих пользователей.
Когда это будет сделано, в конфигурации пакета добавьте социальную сеть с учетными данными (идентификатор приложения + токен), предоставленными социальная сеть). См. раздел настройка владельцев ресурсов док.

После этого, чтобы аутентифицировать ваших пользователей в социальной сети и получить токен доступа, вы должны подключить своего провайдера пользователей к HWIOAuthBundle.

Первая ссылка показывает, как заставить HWIOAuthBundle работать с FOSUserBundle в качестве провайдера пользователя. Вы можете легко адаптировать его к своим потребностям, настроив собственного поставщика пользователей и пропустив шаг о FOSUB.

Существует множество примеров, таких как HWIOAuthBundleByExample, которые показывают, как использовать его с базовым провайдером пользователей.
Еще один хороший способ: добавление HWIOAuthBundle в ваш проект symfony2

Этот пакет в первую очередь основан на конфигурации, также я не буду переписывать здесь документацию по пакету.

ИЗМЕНИТЬ2

В маршрутизации должно быть следующее:

hwi_oauth_login:
    resource: "@HWIOAuthBundle/Resources/config/routing/login.xml"
    prefix:   /login
hwi_oauth_redirect:
    resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml"
    prefix:   /connect
hwi_oauth_connect:
    resource: "@HWIOAuthBundle/Resources/config/routing/connect.xml"
    prefix:   /connect
# ... Add your other routes here
person chalasr    schedule 27.01.2016
comment
Мне не нужен FOSUserBundle, мне нужен только токен доступа. - person shuba.ivan; 28.01.2016
comment
Смотрите изменения в моем ответе. Чтобы получить токен доступа, вы должны аутентифицировать своего пользователя в социальной сети через OAuth. - person chalasr; 28.01.2016
comment
В файле security.yml измените владельца ресурса с my_github на github и повторите попытку. Держи меня в курсе - person chalasr; 01.02.2016
comment
Готово. Теперь есть - невозможно сгенерировать URL-адрес для именованного маршрута hwi_oauth_connect_service, поскольку такой маршрут не существует. - person shuba.ivan; 02.02.2016
comment
спасибо, это нормально. И я обновляю свой вопрос? может быть, вы знаете, как перезагрузить действие и шаблон? - person shuba.ivan; 02.02.2016
comment
Пожалуйста. Я действительно не понимаю, что вы подразумеваете под действием перезагрузки и шаблоном? Я думаю, вам следует открыть другой вопрос для этой конкретной потребности, но если вы можете, попробуйте объяснить мне, что вам нужно, с помощью общего варианта использования. Если вы просто хотите переопределить шаблон по умолчанию, скажите мне, и я объясню вам, какие возможности у вас есть. - person chalasr; 02.02.2016
comment
Я думаю, что ответы на этот вопрос могут помочь вам настроить вашу реализацию. stackoverflow.com/questions/20998778 / - person chalasr; 02.02.2016
comment
спасибо, все заработало. Может быть вы знаете, как после службы app.provider.user_provider сделать редирект в моем роутинге? - person shuba.ivan; 03.02.2016
comment
Взгляните на этот ответ stackoverflow.com/a/27750126/4363634 и другие в том же сообщении. - person chalasr; 03.02.2016