如何判断URL是否来自Facebook iFrame请求?
我有一个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”模板。