Медленная загрузка приложения Facebook canvas при нажатии на ссылки (если цель верхняя) - PullRequest
1 голос
/ 21 марта 2012

Ситуация: я разрабатываю приложение для холста на Facebook. Facebook отправляет мне запрос POST с подписанным подписью каждый раз, когда страница отображается. Внутри моего приложения у меня есть все мои ссылки с target = "_ top", потому что, если я этого не сделаю, Facebook отправит моему серверу общий GET без подписанного запроса. Поэтому я не могу проверить информацию о пользователе.

Проблема: это слишком медленно! даже если я тестирую его локально, каждый щелчок, который я нажимаю, отрисовывается в течение 1 секунды, и мой холст становится полностью белым, а затем отображается информация. Это будет плохой опыт пользователя.

Мои тесты: если я удаляю target = _top и указываю все ссылки на мой сервер без app.facebook.com/, что бы то ни было, он загружается очень быстро.

Мои сомнения: есть ли проблемы с безопасностью? Если я укажу все ссылки на мой сервер (нет apps.facebook.com), я не смогу проверить подписанный запрос, я проверю его только на главной странице ..

Любой совет? любой учебник? Есть ли у меня какое-то недопонимание этого? (Это мое первое приложение на Facebook)

Ответы [ 2 ]

2 голосов
/ 22 марта 2012

Вы прочитали учебник Аутентификация на стороне сервера ? Вы делаете это неправильно.

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

Что вы должны сделать:

Когда вы получаете POST с подписанным запросом, декодируйте его и проверьте, аутентифицирован ли пользователь, сохраняет ли он данные (токен и тому подобное) где-то (сеанс, дБ, кэш). Если он не аутентифицирован, отправьте его в диалоговое окно авторизации, как отмечено в руководстве, когда он вернется, замените полученный код (в GET) на токен (также показанный в руководстве), а затем перенаправьте его на http (s): //apps.facebook.com/YOUR_APP, и вы будете опубликованы с подписанным запросом, сохраненным и т. д.

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

Должно быть только два раза, когда Facebook отправляет вам запрос, когда POST загружается, второй - когда пользователь возвращается из диалога аутентификации, в котором вы либо получаете код * 1014. * параметр или ошибка в случае, если пользователь отклонил аутентификацию. Другие запросы должны поступать из вашего приложения (внутри iframe) на серверы приложений.

1 голос
/ 21 марта 2012

JDL,

Я полагаю, что вы запрашиваете API графа при каждом запросе (и именно поэтому вам всегда нужен подписанный запрос). Это правильно?

API графика довольно медленный (~ 1 секунда / запрос), и вы должны использовать его только при необходимости. Например, когда вы впервые получаете access_token, вы должны сохранить его в своем сеансе и запросить граф API, чтобы получить соответствующую информацию о пользователе Facebook. Но тогда вы должны поместить необходимую вам информацию об этом пользователе в вашу сессию и обновлять ее (используя API графа) только тогда, когда токен доступа signature_request отличается от того, который вы сохранили в своей сессии.

Поведение добавления _top к цели ваших ссылок в порядке, и это хорошая практика в пределах холста facebook.

...