我已成功配置FOSUserBundle以连接到网站的管理部分,这非常有效。
我们希望公众用户只能通过Facebook登录网站,所以我也安装了FOSFacebookBundle,它可以运行。有点。我可以登录,验证,访问用户的个人资料页面并注销;一切都按预期工作。
但是,当用户通过Facebook登录时,用户不会添加到数据库中。我错误地认为这是文档(https://github.com/FriendsOfSymfony/FOSFacebookBundle)底部的“自定义用户提供程序”应该做的吗?
基本上,当Facebook登录发生时,添加用户(如有必要),然后通过FOSUserBundle获取。
我一次又一次地关注文档,在这里阅读有关SO的问题,无法弄清楚发生了什么(不是)。
任何人都有关于代码中某些内容可能导致登录操作不使用Facebook数据更新数据库的想法?
答案 0 :(得分:2)
在security.yml中:
providers:
chain_provider:
chain:
providers: [my_fos_facebook_provider, fos_userbundle]
my_fos_facebook_provider:
id: my.facebook.user
fos_userbundle:
id: fos_user.user_manager
firewalls:
admin:
pattern: /admin(.*)
form_login:
provider: fos_userbundle
login_path: /admin/login
use_forward: false
check_path: /admin/login_check
failure_path: null
logout:
path: /admin/logout
anonymous: true
public:
# since anonymous is allowed users will not be forced to login
pattern: ^/.*
fos_facebook:
provider: my_fos_facebook_provider
app_url: "http://www.facebook.com/apps/application.php?id=your_app_id"
server_url: "http://localhost/facebookApp/"
login_path: /
check_path: /login_check_fb
default_target_path: /moi
anonymous: true
logout:
handlers: ["fos_facebook.logout_handler"]
这个想法是通过运行工厂用户名和密码访问管理员,普通用户通过Facebook登录。
现在,关键部分是定义多个提供者(我有),但最重要的是在每个防火墙中指定“提供者”。 admin的fos_userbundle和公共的my_fos_facebook_provider