مشكلة تفويض Facebook
-
20-08-2019 - |
سؤال
أنا أعمل على تطبيق Facebook وهناك شيء لا أفهمه حول كيفية عمل نظام التفويض الخاص بهم.
الإعداد الأساسي لدينا هو هذا
Canvas url = domain.com/facebook
هذه صفحة بسيطة بها عنصر FBML IFRAME يشير إلى domain.com/facebook/app وهي صفحة HTML التي تخدم تطبيق فلاش.
يطلب تطبيق Flash بيانات إضافية من خادم التطبيق الخاص بنا - بعض هذه الطلبات تطلب بيانات Facebook (مثل قائمة معرفات الأصدقاء).
لذا ، فإن Flash ثم يقدم طلبًا إلى Domain.com/resources/facebook/friends - هذه صفحة PHP تقوم بإنشاء مثيل Facebook (مكتبة PHP الخاصة بهم) ويقوم بالاتصال الضروري إلى واجهة برمجة التطبيقات الخاصة بهم وإرجاع البيانات.
ومع ذلك ، فإن طلب عنوان URL هذا (بواسطة الفلاش) لا يتحقق من صحة ، لذلك يتم إعادة توجيهه بعد ذلك إلى تسجيل الدخول عندما يعيد توجيه عنوان URL الخاص بي مع معلمتين - معلمتين - Auth_token و التالي. وبالتالي فإن الطلب صالح ، لكن إعادة توجيه مكالمة الفلاش.
لذا ، أحاول معرفة كيفية إجراء مكالمات API الأخرى (عندما يكونون مكالمات API في Facebook) ، يتم إرفاقها على Facebook من البداية.
المحلول
حسنًا ، لقد اكتشفت ذلك.
كما اتضح ، يتبع Flash بالفعل عمليات إعادة التوجيه - كل ما كنت بحاجة إلى فعله هو اكتشاف (في عنوان URL Canvas) عندما كان هناك طلب تفويض (لاحظه وجود Auth_token و التالي) و تضمن Auth_token كمعلمة GET عند إعادة توجيهها إلى عنوان URL التالي (بشكل أساسي ، قم بإعادة توجيه Auth_Token إلى الطلب الأصلي).
لذلك ، على عكس ما قلته أعلاه ، لم يكسر إعادة التوجيه مكالمة الفلاش - لم يكن لديها بيانات كافية لتكون طلبًا صالحًا.
نصائح أخرى
حل عن طريق وضع الرمز أدناه بدلاً من خط "requist_login ()"
if (isset($_GET['auth_token'])) {
$sess_data=$facebook->api_client->call_method('auth.getSession',array('auth_token'=>$_GET['auth_token']));
$facebook->set_user($sess_data['uid'],$sess_data['session_key'],$sess_data['expires']);
$user=$sess_data['uid'];
}
if (!$sess_data) {
$user=$facebook->require_login();
}