キャンバスで実行される Facebook アプリを開発しています。これがシナリオです(非常に一般的だと思います)。これはすべてサーバー側の実装です。
であること:
APP_URL: https://apps.facebook.com/xxxxxx/
CANVAS_URL: https://myexample.com/facebookApp/
ステップ 1 (アプリのインデックス) にはフォームがあります。あります
action="CANVAS_URL/step2"
(アプリの URL ではないことに注意してください)。次のステップで使用するためにsigned_request
、隠しフィールドがあります<input type="hidden" name="signed_request" value="<?php echo $_POST['signed_request'] ?>" />
ステップ 2 : フォームの情報を受け取り、それを に格納してから
Session
、signed_request を解析します。これは正常に動作します。ユーザーが認証された後にデータベースに保存したいので、セッションに保存します。ユーザーがアプリにログオンしていた場合、私は彼をにリダイレクトしAPP_URL/step3
ます。そうでない場合は、彼をログイン ダイアログにリダイレクトします&redirect_uri=APP_URL/step3
。APP_URL/step3
どちらの場合も、ステップ 3 は(signed_request
ユーザーが認証されているかどうかと別のデータを再度確認する必要があるため) であることに注意してください。すべてのリダイレクトは JavaScript で行われます。<script type="text/javascript">window.top.location = "URL";</script>
ステップ 3 : 以前にセッションに保存されたデータを保存したいと思います。しかし、ユーザーが FB キャンバスをナビゲートしているため、セッション データは利用できません。
いくつかの組み合わせを試しました。フォームが に送信された場合APP_URL/step2
( の代わりにCANVAS_URL/step2
のセッションを作成するためAPP_URL
)、投稿されたデータを取得できません ( ではなく FB に送信されるためCANVAS_URL
)。
session_id
を使用して でセッションを再作成することを考えましたAPP_URL
が、残念ながら、それはあまり安全な方法ではありません。より良い回避策があるに違いないと確信しています。