Symfony2.1 - HWIOAuthBundle和谷歌oauth身份验证

时间:2012-09-04 09:34:24

标签: authentication symfony oauth-2.0 symfony-2.1 hwioauthbundle

我正在尝试使用HWIOAuthBundle设置Symfony2.1来处理Google oauth身份验证。

我已遵循捆绑说明中的手动说明,但仍然缺少某些内容。当我访问需要经过身份验证的用户(或只是输入url / connect / google)的操作时,我被重定向到Google身份验证页面 - 此部分正常运行。但是在重定向后(在登录Google并同意共享我的数据后),新用户不会在数据库中创建,我被重定向到连接/失败操作。 Google身份验证应该只是验证用户身份的一种方法。知道什么可能是错的吗?

这是我的路线:

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

google_login:
    pattern: /login/check-google

security.yml

firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false

    secured_area:
        pattern:    ^/
        form_login:
            provider: fos_userbundle
            login_path: /connect/google
            check_path: /login/login_check
        logout: true
        anonymous: true
        oauth:
            resource_owners:
                google: "/login/check-google"
            login_path:        /connect/google
            failure_path:      /connect-fail
            # FOSUB integration
            oauth_user_provider:
                service: hwi_oauth.user.provider.fosub_bridge

和配置

hwi_oauth:
    firewall_name: secured_area
    resource_owners:
            google:
                type:                google
                client_id:           ....
                client_secret:       ......
                scope:               "https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile"
    fosub:
        username_iterations: 5
        properties:
            google: googleId

google redirectURL

http://xxxx/login/check-google

我的用户实体:

class User extends BaseUser
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var integer $id
     *
     * @ORM\Column(name="google_id", type="integer")
     */ 
    protected $googleId;

// edit- update

我刚在Symfony日志中发现我有一个来自谷歌重定向的请求: 在重定向到/ connect-file之前获取http://xxxxx.dk/login/check-google?code=4%2F8tiDAhI45D2g7BvrdtwoF7wJ.Eu7i2fmkYOl05ti8ZT3YDrXXXXXfakeXXXE4hcwI 不幸的是,它看起来请求只尝试基于google_id从我的数据库中检索用户 SELECT * FROM app_user t0 WHERE t0.googleId =?限制1:['123456789']但那个用户不存在。

我应该创建用户befor我试图验证他/她吗?

2 个答案:

答案 0 :(得分:5)

正如beliveyourdream所说...... HWIOAuth不为您提供自动用户注册。您需要创建自己的用户提供程序并使用它。我建议您使用FOSUserBundle,因为它完成了大部分工作,并且很好地集成在HWIOAuth中。有关如何设置(因为连接它们需要做一些工作),请使用此Gist。它使用来自PROVIDERS(gacebook,google,github等)的数据和帐户连接(已经注册的用户可以将他/她的帐户与来自PROVIDERS的帐户连接)进行用户注册,从而设置您的应用程序。此外,在创建/连接时,用户将能够使用PROVIDERS的凭据连接到您的站点(毕竟......毕竟是OAuth)。

答案 1 :(得分:4)

可悲的是,HWIOAuthBundle默认不处理自动注册。如果您现在要登录,则必须手动创建用户。