Symfony HWIOAuthBundle Accesstoken

时间:2016-01-27 18:58:55

标签: php symfony oauth access-token hwioauthbundle

我需要在社交网络上获取访问令牌,例如github。逻辑是当我的身份验证用户输入配置文件时,他可以将按钮和社交网络确认帐户,这种情况我需要访问令牌访问令牌oauth。我有标准的注册和身份验证,只有我需要这是获取访问令牌并在DB中设置它。

我在内核中安装bundle write

"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

但是现在我连接到git hub时有另一个我在hwi_oauth_connect_service操作中输入了rout:connectServiceAction并且有标准模板,如何重新加载这个控制器和动作并更改模板? 或者服务app.provider.user_provider如何在我的路由中重定向?

1 个答案:

答案 0 :(得分:2)

使用FOSUserBundle实现HWIOAuthBundle的一个很好的例子 https://gist.github.com/danvbe/4476697

修改

HWIOAuthBundle是OAuth的捆绑包,它为其配置/使用提供了很好的documentation

首先,您必须设置将使用HWIOAuth的防火墙。 它应该与你的

相同

然后,您必须在社交网络上注册您想要连接用户的Symfony2应用程序。
完成后,在捆绑配置中,添加社交网络,其中包含社交网络提供的凭据(应用程序ID +令牌)。 请参阅 configuring resource owners doc。

之后,要在社交网络上对用户进行身份验证并获取访问令牌,您必须将用户提供程序连接到HWIOAuthBundle。

第一个链接显示了如何使HWIOAuthBundle与FOSUserBundle一起作为用户提供者。 您可以通过设置自己的用户提供程序轻松地根据需要调整它,并跳过有关FOSUB的步骤。

有很多例子如HWIOAuthBundleByExample,它们展示了如何将它与基本用户提供商一起使用 另一件好事:Adding HWIOAuthBundle to your symfony2 project

此捆绑包主要基于配置,我也不会在此重写捆绑文档。

<强> EDIT2

您的路线中必须包含以下内容:

 [0] 1  //because both "cy" and "gr" are contained in 1 secondList sublist(s)
 [1] 2  //because both "cy" and "ja" are contained in 2 secondList sublist(s)
 [2] 1  //et cetera..
 [3] 3
 [4] 1
 [5] 2
 [6] 1
 [7] 2
 [8] 2
 [9] 3
[10] 4
[11] 2
[12] 2
[13] 2
[14] 3