Мне нужно получить токен доступа в социальной сети, например 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 сделать перенаправление в моей маршрутизации?
Используется, чтобы попробовать эту связку. На мой взгляд, этот пакет может быть полезен, но без него не так сложно реализовать социальные функции - слишком много кода и, насколько я помню, максимальное количество запросов для входа пользователя через sn было 3 (ok.ru oauth), поэтому мы решили написать небольшой кусок кода вместо использования этого пакета (но у нас уже есть жульничество в проекте - так этот вариант нам был проще). –
Я обновляю свой вопрос –
Чтобы получить токен, вам необходимо правильно настроить свою сеть и просмотреть URL-адрес входа в систему, вы будете перенаправлены в сеть для предоставления доступа и обратно в свое приложение с ответом, содержащим токен, и всеми другими сведениями о вашего пользователя. В security.yml измените ресурс_домена с 'my_gihub' на 'github' – chalasr