如何判断URL是否来自Facebook iFrame请求?

1 投票
2 回答
1122 浏览
提问于 2025-04-16 10:33

我有一个Google App Engine的应用程序,我想在请求来自Facebook应用时,使用不同的django模板。请问我该怎么判断请求是来自Facebook的呢?我在请求的头信息里没有看到什么特别的标记。

我现在使用的URL模式是:

r'/user/(.*)' 

这个模式是用来处理“用户”请求的。我想我可以改成:

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

这样来设置路径的第一部分,并检查是否包含'facebook'。不过这需要我确保所有在Facebook的iFrame中显示的内部链接都是以/facebook/开头的。这样做会有风险吗?

2 个回答

0

检测 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>')

不过要注意,这个信息可能并不是每次都有,所以先检查一下这个关键字是否存在。

如果你的来源地址和你的应用网址匹配,就继续执行,否则就把页面重定向到你的 Facebook 应用。

希望这对你有帮助。:)

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”模板。

撰写回答