Symfony1 Facebook无法与Symfony应用程序通信,因为需要sfGuardAuth身份验证

Symfony1 Facebook无法与Symfony应用程序通信,因为需要sfGuardAuth身份验证,symfony1,doctrine,facebook-like,symfony-1.4,sfguard,Symfony1,Doctrine,Facebook Like,Symfony 1.4,Sfguard,我正在Symfony 1.4和Doctrine 1.2上建立一个音乐网站。我正在尝试在我的页面上集成facebook插件(如发送、发布消息按钮)。例如,我希望用户能够喜欢我的歌曲模块中歌曲页面上的歌曲。但问题是,我已经使用sfDoctrineGuard来保护我应用程序中除登录页以外的所有模块。因此,如果用户登录并使用类似facebook的按钮来喜欢歌曲页面上的歌曲,因为歌曲模块受sfGuardAuth保护,facebook API无法与其对话,并被转发到登录页面。这意味着我的应用程序中所有喜欢的

我正在Symfony 1.4和Doctrine 1.2上建立一个音乐网站。我正在尝试在我的页面上集成facebook插件(如发送、发布消息按钮)。例如,我希望用户能够喜欢我的歌曲模块中歌曲页面上的歌曲。但问题是,我已经使用sfDoctrineGuard来保护我应用程序中除登录页以外的所有模块。因此,如果用户登录并使用类似facebook的按钮来喜欢歌曲页面上的歌曲,因为歌曲模块受sfGuardAuth保护,facebook API无法与其对话,并被转发到登录页面。这意味着我的应用程序中所有喜欢的内容都会发布在facebook活动订阅源上,就好像用户喜欢我的登录页一样

有没有一种方法可以将异常构建到sfGuard中,以便来自facebook域的任何流量都可以访问该页面?有解决办法吗?我希望能够在facebook的墙上显示我的安全页面上的所有facebook元数据,无论喜欢哪首歌。如果我禁用了所有的sfGuard安全性,它可以正常工作


任何帮助都会很好,因为我被难住了,而且还没有找到其他人有这个问题。

好吧,如果你想允许Facebook的请求绕过你的sfGuard安全,这可能是一个巨大的安全漏洞。如果有人点击Facebook上的链接,它也可以访问你的网站,而无需登录

你可能会找到一个解决办法,调整Facebook机器人谁刮你的网页。刮板的用户代理是:
“facebookexternalhit/1.1(+http://www.facebook.com/externalhit_uatext.php)“
。因此,通过查看用户代理,可以很容易地允许访问其请求但是,现在任何人都可以轻松欺骗用户代理

也许你得另找一条路。我想有一种轻页面,每个人都可以访问它,在那里你可以显示最少的信息(比如只显示艺术家和歌曲名称,而不能播放)。但为了确保,如果没有登录的人尝试查看该页面,它将不会重定向到登录页面,而是重定向到该轻页面。你明白了吗

然后,你可以放置一个巨大的按钮,允许新用户注册以查看整个页面

无论如何,在任何情况下,您都会发现,您应该使用filter(在
filters.yml
中)来实现它。filter是在任何操作之前执行的。因此,它是进行此类检查的最佳场所

您将找到有关筛选器的信息:

  • 在上(它们是2个链接)
  • ssl要求的实现(谷歌缓存页面)
  • 基本实现
编辑:

首先,创建一个名为“facebook机器人”的用户,并将其id放入
/apps/frontend/config/app.yml

all:
   facebook_bot_id: 56 // sf_guard_user_id
rendering: ~

facebookBotFilter:
  class: facebookBotFilter

security:  ~
然后创建一个简单的过滤器
lib/filter/facebookBotFilter.php


如果你想允许Facebook的请求绕过你的sfGuard安全,那么这可能是一个巨大的安全漏洞。如果有人在Facebook上单击该链接,它也可以访问你的网站,而无需登录

你可以通过调整Facebook机器人来找到一个解决办法,该机器人会刮取你的页面。刮取器的用户代理是:
“facebookexternalhit/1.1(+http://www.facebook.com/externalhit_uatext.php)"
。因此,通过查看用户代理可以轻松访问其请求。但是,现在任何人都可以轻松欺骗用户代理

也许你必须找到另一种方法。我想有一种轻薄的页面,每个人都可以访问,在那里你可以显示最少的信息(只喜欢艺术家和歌曲名称,但无法播放。但要确保,如果有人未登录,尝试查看该页面,它将不会重定向到登录页面,而是重定向到该页面。明白了吗

然后,你可以放置一个巨大的按钮,允许新用户注册以查看整个页面

无论如何,在任何情况下,您都会发现,您应该使用filter(在
filters.yml
中)来实现它。filter是在任何操作之前执行的。因此,它是进行此类检查的最佳场所

您将找到有关筛选器的信息:

  • 在上(它们是2个链接)
  • ssl要求的实现(谷歌缓存页面)
  • 基本实现
编辑:

首先,创建一个名为“facebook机器人”的用户,并将其id放入
/apps/frontend/config/app.yml

all:
   facebook_bot_id: 56 // sf_guard_user_id
rendering: ~

facebookBotFilter:
  class: facebookBotFilter

security:  ~
然后创建一个简单的过滤器
lib/filter/facebookBotFilter.php


<代码>谢谢大家的全面回复@ J0K。感谢你。你给了我一些很好的选择。如果有人能访问读到安全的页面,我的应用程序就没什么大不了的。登录更多的是定制/用户特定的动作。我想尝试访问脸谱网BoT刮削器。我将如何配置SfReTrimulu?ard是否允许访问bot?我应该将类似以下内容放在哪里:
if($\u SERVER['HTTP\u USER\u AGENT']==“facebook外部点击/1.1”(+http://www.facebook.com/externalhit_uatext.php)"){  }
谢谢!哇,我试过了,效果很好!非常感谢j0k的一出戏。注意:修复了以下行中的一些小错误:
(preg_match(“/facebook externalhit”,$useragent))非常感谢你的全面回复@ J0K。感谢你。你给了我一些很好的选择。如果有人能访问读到安全的页面,我的应用程序就没什么大不了的。登录更多的是定制/用户特定的动作。我想尝试访问脸谱网BoT刮削器。我将如何配置SfReTrimeg?是否允许访问bot?我应该将以下内容放在哪里:
if($\u SERVER['HTTP\u USER\u AGENT']==”facebook外部点击/1.1(+http://www.facebook.com/externalhit_uatext.php)“{}
谢谢!哇,我很高兴