Как авторизовать приложение Facebook с помощью перенаправления в холсте?

Я пытаюсь войти в создание приложений Facebook, но я испытываю затруднения при получении разрешения, работающего в схеме перенаправления в холсте.

Используя API JavaScript, я получил его работающий довольно легко в раскрывающейся схеме:

$("#loginButton").click(function(e) {
    FB.login(function(response) {
        if (response.perms) {
            perms();
        }
}, {perms : 'publish_stream'});

Но всплывающее окно должно быть ненужным дополнительным щелчком, потому что любое приложение, которое я вижу, запрашивает авторизацию прежде даже показать Вам целевую страницу. Как это:

http://i.imgur.com/yBGzL.png

Я полагаю, что они просто используют схему перенаправления. Таким образом, я провел весь день, пробуя различные способы, которыми я мог найти:

header("Location: https://graph.facebook.com/oauth/authorize?client_id=" . $gAppId . "&redirect_uri=" . urlencode($gUrl) . "&perms=publish_stream");

header("Location: http://www.facebook.com/login.php?v=1.0&api_key=" . $gApiKey . "&next=" . urlencode($gUrl) . "&canvas=");

header("Location: http://www.facebook.com/connect/uiserver.php?app_id=" . $gAppId . "&next=" . urlencode($gUrl) . "&return_session=0&fbconnect=0&canvas=1&legacy_return=1&method=permissions.request");

Но все они, вместо того, чтобы показать материал запроса авторизации, показывают ссылку как это:

http://i.imgur.com/bLwPQ.png

Весело, если я открываю адрес iframe в новой вкладке, я получаю запрос авторизации как, я хотел. Но я хочу, чтобы это сразу отобразилось, без дополнительного щелчка, как любое приложение.

Вот пример приложения, которое делает авторизацию и запрашивает, чтобы полномочия все в одном пошли, в форме перенаправления, прежде даже отобразить целевую страницу:

www.facebook.com/send.fortune.cookies

Как они делают его?

6
задан Joe Lewis 27 June 2013 в 17:01
поделиться

1 ответ

Проблема в том, что перенаправление на стороне сервера перенаправляет только внутренний фрейм вашего приложения, а не всю страницу, а Facebook не любит отображать системные диалоги внутри фреймов.

Вам потребуется перенаправление на стороне клиента, возможно, что-то вроде этого:

<script>
    <?php 
        if($doRedirect) {
            echo 'top.location="http://redirect_url";';
        }
    ?>
</script>
6
ответ дан 8 December 2019 в 13:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: