如何组合FosUserBundle和HWIOAuthBundle登录和注册

时间:2014-01-17 08:33:33

标签: symfony fosuserbundle symfony-2.3 hwioauthbundle

我正在制作登录页面和注册页面 使用FosUserBundle和HWIOAuthBundle + Symfony2.4使用composer
我想要的行为是:
在登录页面上 - >

        users can login using Google, Facebook or Login Through a Form 
注册页面上的

- >

        users can Register using Google, Facebook or Register Through a Form 

关注此帖子http://m2mdas.github.io/blog/2013/11/21/integrate-hwioauthbundle-with-fosuserbundle/

作者建议覆盖HWIOAuthBundles Login.html.twg,我将其覆盖     app / Resources / HWIOAuthBundle / views / Connect
并插入FosUserBundle表格树枝代码(http://pastebin.com/8FS3Smta
但是当我尝试这样时它会出错:         HWIOAuthBundle中不存在变量“last_username”:第15行的Connect:login.html.twig

这意味着HWIOauthBundle没有使用/包括FOSUserbundle

根据我的理解,你只能扩展一个BaseBundle 问题:
1)这有可能吗?
2)如果没有,那么可以证明所需行为的正确套装是什么

任何帮助将不胜感激

---编辑---
我能够结合使用2种登录方法(请参阅下面的m2mdas答案) 但仍然无法结合2种注册方法

解决方法
如果我输入以下网址,它的工作原理 .... app_dev.php / secure_area /连接/谷歌 所以我需要创建一个到URL的自定义路由 我试过了

my_registration:
    path: /secure_area/registration
    defaults:
        _controller: FrameworkBundle:Redirect:urlRedirect
        path: /secure_area/connect/google
        permanent: true

但这需要我 .... app_dev.php / secure_area / connect
而不是 .... app_dev.php / secure_area /连接/谷歌

如预期的那样 TIA

1 个答案:

答案 0 :(得分:4)

好吧,我似乎没有解释好:)我实际上是指你应该复制/修改部分

{% for owner in hwi_oauth_resource_owners() %}
<a href="{{ hwi_oauth_login_url(owner) }}">{{ owner | trans({}, 'HWIOAuthBundle') }}</a> <br />
{% endfor %}
HWIOAuthBundle:Connect:login.html.twig

并将其放在http://yoursite.com/login显示的FOSUserBundle:Security:login.html.twig文件中。因此,当前的登录网址为http://yoursite.com/login而不是http://yoursite.com/connect

但是还有一个额外的步骤,在app/config/security.yml中,您必须将oauth防火墙的login_path选项更改为FOSUserbundle的登录网址,该地址通常为/login,例如

#app/config/security.yml
#....
oauth:
    #..
    login_path: /login
    #..

我也pushed a branch in the MinimalSecurityBundlesSetup repo。您可以将其作为参考。

更新:有关注册表单的答案

这是registration_form配置选项的用途。默认情况下,它设置为内置fos_user.registration.form表单的FOSUserBundle。如果confirmation选项设置为true,则成功执行OAuth身份验证后HWIOAuthBundle将重定向到http://your.site.com/connect/registration/{userid}路由,其中​​会显示FOSUserBundle注册表单。

如果您的自定义注册表单基于fos_user.registration.formas documented in the doc),则必须将registration_form的值设置为表单服务名称的名称。然后,您必须自定义HWIOAuthBundle:registration.html.twig以匹配您的注册页面布局。正常注册页面和OAuth注册页面组合到同一路线似乎对我来说是不必要的。