Я использую версию 3.0 для разработчиков Facebook Developer Toolkit для создания приложения MVC iframe Facebook и с некоторыми проблемами с получением бесконечного ключа сеанса сразу после он предоставляется.Как получить бесконечный ключ сеанса Facebook сразу после того, как offline_access предоставляется с помощью Facebook Developer Toolkit
Когда пользователь впервые обращается к моим настройкам приложения «Просмотр», чтобы установить их настройки, у них просто есть обычный истекающий ключ сеанса от Facebook. Нет проблем.
В зависимости от предпочтений, которые они выбрали, я запрашиваю их для расширенного разрешения offline_access, используя библиотеку клиентских библиотек Facebook javascript FB.Connect.showPermissionDialog. Опять не проблема, они дают разрешение.
В этот момент выдается новый неисключительный (бесконечный) сеансовый ключ. Мне нужно сохранить это в моей базе данных для будущего использования. Проблема в том, что я не могу понять, как получить ее немедленно, когда мне это нужно. Куки-файлы Facebook, содержащие информацию о сеансе, не обновляются до тех пор, пока не пройдет еще несколько обновлений страницы.
Обнаружена ошибка в блоге отслеживания ошибок в Facebook по ошибке 6421, связанная с этим, но я ищу решение на стороне сервера с помощью выпуска Facebook Developer Toolkit 3.0. Мне хотелось бы узнать, как FDT api выйдет на Facebook и получит новую сессию.
Я знаю, что новая сессия установлена на стороне Facebook. Существует контрольный GET на http://www.facebook.com/extern/login_status.php, который отображается на панели Firebug Net сразу же после того, как пользователь предоставляет разрешение offline_access и имеет ответ с некоторым javascript, содержащим новый ключ сеанса без истечения срока действия. И если я продолжу использовать старый ключ сеанса истечения срока действия, я получаю неверные ошибки сеанса из Facebook.
В моем контроллере, у меня есть код, как:
[AcceptVerbs(HttpVerbs.Post)]
[FacebookAuthorization(IsFbml = false)]
public ActionResult Index(FormCollection collection)
{
var api = this.GetApi();
var userid = api.Session.UserId;
var key = api.Session.SessionKey;
}
Это становится старым SessionKey, а не новый, не истекающим один.
У меня нет этой проблемы, если я украшу свой ActionResult с помощью ExtendedPermissions = "offline_access" в GET, заставляя пользователя предоставлять offline_access еще до просмотра страницы, но мне не нравится этот пользовательский интерфейс. Я предпочитаю запрашивать javascript только тогда, когда это необходимо, и лайтбоксы разрешений javascript намного лучше, чем запрос полной прав ширины страницы, когда я использую ExtendedPermissions = «offline_access».
Я также попытался перехватить вызов моего xd_receiver (который я создал, чтобы я мог ударить точку останова отладчика в своем контроллере и проверить входящий запрос от Facebook). Он попадает во время предоставления расширенного разрешения, но опять же имеет устаревшую информацию о завершающем сеансе.
Итак, чтобы найти, я ищу способ использовать Инструментарий для разработчиков Facebook, чтобы принудительно обновить сеанс от Facebook и получить новый бесконечный ключ сеанса (и секрет).
Хотя я предпочел бы решение с использованием API-интерфейс FDT, подход, который я буду стараться, чтобы выполнить GET на http://www.facebook.com /extern/login_status.php в моем контроллере. У меня не было этого, чтобы работать в прошлом, но я думаю, может быть, мне нужно передать все файлы cookie, которые, как я вижу, отправляются, когда я вижу, что GET происходит в Firebug. Если это не всплывает, я рассматриваю какой-то уродливый метод грубой силы, например, принудительное обновление страницы после получения разрешений offline_access, пока я не получу ключ сеанса с expires == 0, но это будет последний канал подход. –
Я пробовал использовать свой собственный колл для имени пользователя login_status.php, но, к сожалению, он работает только при передаче файлов cookie, которые находятся в домене facebook.com. Я считаю, что это невозможно, поскольку по соображениям безопасности я не могу получить эти данные ... правильно? Для целей тестирования я просто копировал/вставлял значения cookie в свой код, чтобы выполнить вызов, и он работает некоторое время, пока значения cookie не изменятся. И, конечно, я не могу получить данные программно. Увеличивает ли эта новая информация какие-либо другие возможности, которые, по вашему мнению, я должен попробовать? –
Это все больше похоже на ошибку в API Facebook для обработки состояния сеанса и их зависимости от файлов cookie. См. Ошибку в блоге 6421. Я использую новую клиентскую библиотеку Facebook alpha javascript, которая поддерживает управление состоянием сеанса без cookie. Если/когда я его решаю ... Я буду держать этот вопрос в курсе. –