2016-01-27 4 views
2

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

установить расслоение записи в ядре

"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 

и routnig в пачке

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 

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

+0

Используется, чтобы попробовать эту связку. На мой взгляд, этот пакет может быть полезен, но без него не так сложно реализовать социальные функции - слишком много кода и, насколько я помню, максимальное количество запросов для входа пользователя через sn было 3 (ok.ru oauth), поэтому мы решили написать небольшой кусок кода вместо использования этого пакета (но у нас уже есть жульничество в проекте - так этот вариант нам был проще). –

+0

Я обновляю свой вопрос –

+0

Чтобы получить токен, вам необходимо правильно настроить свою сеть и просмотреть URL-адрес входа в систему, вы будете перенаправлены в сеть для предоставления доступа и обратно в свое приложение с ответом, содержащим токен, и всеми другими сведениями о вашего пользователя. В security.yml измените ресурс_домена с 'my_gihub' на 'github' – chalasr

ответ

2

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

EDIT

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

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

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

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

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

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

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

EDIT2

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

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 
+0

Мне не нужен FOSUserBundle, только мне нужен токен доступа. –

+0

См. Изменения в моем ответе. Чтобы получить токен доступа, вы должны аутентифицировать своего пользователя в социальной сети через OAuth. – chalasr

+0

Я обновляю свой вопрос –