2011-01-25 7 views
1

私はGoogle App Engineアプリケーションを持っており、Facebookアプリケーションからリクエストが来たら、別のdjangoテンプレートを提供したいと思っています。どうすればそれを検出できますか?私はヘッダーでユニークなものは何も見ません。Facebook iFrameからURLがリクエストされているかどうかを確認する方法は?

は、私は現在、URLパターンを使用しています:

r'/user/(.*)' 

は、 "ユーザー" 要求ハンドラにマップします。私は代わりにできると思います:

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

そして、 'facebook'を確認してください。これは、FacebookのiFrameで提供されるすべての内部リンクが/ facebook /であることを保証することを要求します。このアプローチに危険はありますか?

+1

なぜ単にFacebookのアプリと通常のページに異なるURLを使用していないのですか? –

+0

ハンドラでコードを再利用したいからです。別のURLを同じハンドラにマップできますか? (その後、私は単にfacebookのリクエストURLをチェックすることができます)。 –

+2

はい、同じハンドラに対して複数のURLを使用できます。 –

答えて

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): 

Trueの場合、私は、適切な "フェイスブック" テンプレートに向かいます。 FacebookのIFRAMEを検出する

0

ベストな方法は、ちょうどそれがすべての時間が非常に最初のキーの検出がない可能性があることを注意してください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アプリケーションにリダイレクトします。

希望すると、これが役立ちます。 :)

関連する問題