#php #javascript #facebook
#php #javascript #Facebook
Вопрос:
У меня проблемы с авторизацией пользователя на вкладке страницы Facebook. Я перепробовал много разных методов как в PHP, так и в Javascript, но в основном безрезультатно.
Если бы кто-нибудь мог объяснить это для меня и показать некоторый код, это было бы здорово! Я думал о том, чтобы выполнить авторизацию на PHP, а затем продолжить использовать Javascript с шириной пользовательских данных. Мне также нужно иметь возможность разрешить пользователю соглашаться на действия. итак, всплывающее окно для авторизации и разрешений — это то, с чем мне нужна помощь.
Что вы думаете? Есть ли лучший способ? Помощь с некоторым кодом для этого, как я уже сказал, была бы отличной!
Ответ №1:
Чтобы узнать, прошел ли пользователь проверку подлинности вашего приложения или нет, расшифруйте signed_request и проверьте, передан ли oauth_token:
<?php
$secret='APP_SECRET';
$signed_request=($_REQUEST['signed_request']);
function parse_signed_request($signed_request, $secret) {
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
// decode the data
$sig = base64_url_decode($encoded_sig);
$data = json_decode(base64_url_decode($payload), true);
if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
error_log('Unknown algorithm. Expected HMAC-SHA256');
return null;}
// check signature
$expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
if ($sig !== $expected_sig) {
error_log('Bad Signed JSON signature!');
return null;
}
return $data;
}
function base64_url_decode($input) {
return base64_decode(strtr($input, '-_', ' /'));
}
$information=parse_signed_request($signed_request, $secret);
$oauth_token=$information["oauth_token"];
?>
Затем используйте этот скрипт для аутентификации пользователя, если значение $oauth_token пустое:
<?php
$app_id = "APP_ID";
$canvas_page = "YOUR_TAB_URL";
$auth_url = "http://www.facebook.com/dialog/oauth?client_id="
. $app_id . "amp;redirect_uri=" . urlencode($canvas_page) . "amp;scope=ENTER WANTED PERMISSIONS HERE";
$signed_request = $_REQUEST["signed_request"];
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$data = json_decode(base64_decode(strtr($payload, '-_', ' /')), true);
if (empty($oauth_token)) {echo("<script> top.location.href='" . $auth_url . "'</script>");}
?>
Заполните APP_SECRET, APP_ID, YOUR_TAB_URL и ТРЕБУЕМЫЕ РАЗРЕШЕНИЯ в этих скриптах, приветствия.