【问题标题】:How to determine if url is being requested from Facebook iFrame?如何确定是否从 Facebook iFrame 请求 url?
【发布时间】:2011-01-25 00:24:27
【问题描述】:

我有一个 Google App Engine 应用程序,如果请求来自 Facebook 应用程序,我想提供不同的 django 模板。我怎样才能检测到呢?我在标题中看不到任何独特的东西。

我目前正在使用 URL 模式:

r'/user/(.*)' 

映射到“用户”请求处理程序。我想我可以这样做:

r'/(.*)/user/(.*)'

并参数化路径的第一部分并检查“facebook”。这将要求我确保在 facebook iFrame 中提供的所有内部链接都是 /facebook/。这种方法有什么危险吗?

【问题讨论】:

  • 为什么不简单地为 facebook 应用程序和普通页面使用不同的 URL?
  • 因为我想重用处理程序中的代码。我可以将不同的 URL 映射到同一个处理程序吗? (然后我可以简单地检查 'facebook' 的请求 url)。
  • 是的,您可以为同一个处理程序使用多个 URL。

标签: python django facebook http google-app-engine


【解决方案1】:
.run_wsgi_app(webapp.WSGIApplication([(r'/page/(.*)', Page),
                (r'/user/(.*)', UserProfile),
                (r'/category/(.*)', CategoryProfile),  
                (r'/location/(.*)', LocationProfile),
                (r'/facebook/page/(.*)', Page),
                (r'/facebook/user/(.*)', UserProfile),
                (r'/facebook/category/(.*)', CategoryProfile),  
                (r'/facebook/location/(.*)', LocationProfile), 
                ('/facebook/', BaseHandler),
                ('/', BaseHandler)],
                debug=DEBUG))

然后在每个处理程序中,我检查了 /facebook/ 路径:

if re.search(r".facebook\.*", path):

如果为真,那么我将定向到相应的“facebook”模板。

【讨论】:

    【解决方案2】:

    检测 facebook iframe 的最佳方法是比较 HTTP_REFERER

    import os
    if os.environ['HTTP_REFERER'].find('http://apps.facebook.com/<Facebook_URLID>/') is not 0:
       self.redirect('<Facebook_Application_Page>')
    

    请注意,它可能不会一直存在,因此请先检测密钥。

    如果您的推荐人与您的应用程序 url 匹配,则传递控件,否则将页面重定向到您的 facebook 应用程序。

    希望这对您有所帮助。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 2011-01-07
      • 2014-04-06
      相关资源
      最近更新 更多