Facebook App Iframe OAuth Войти / Ошибка разрешений - можно избежать? - PullRequest
4 голосов
/ 06 марта 2011

У меня та же проблема, что описана здесь Вход в OAuth Facebook для приложений холста iframe отображает изображение логотипа и подпись Перейти на Facebook.com вместо входа в систему - я смог использовать обходной путь в принятом ответе, чтобы убедиться, что пользователи правильно видят окно с разрешениями при первом использовании приложения.

Однако моя проблема заключается в том, что эта форма перенаправления после первоначальной «установки» приложения очень разрушительна для пользователя - они заметно удаляются с сайта Facebook, а затем перенаправляются обратно. Это действительно нарушает пользовательский опыт. Если я использую стандартный метод входа в систему, предоставляемый библиотекой CodeIgniter, которую я использую (http://www.haughin.com/code/facebook/), то вход / загрузка приложения происходит без проблем - но у меня есть вышеупомянутая проблема при первом использовании приложения.

Есть ли способ определить, установлено ли у пользователя приложение, чтобы я мог использовать основной метод входа в систему для каждого экземпляра, кроме приложения "установка"?

1 Ответ

2 голосов
/ 07 марта 2011

В вашем приложении iframe canvas, если пользователь уже авторизовал ваше приложение, подписанный запрос будет содержать user_id и oauth_token, поэтому нет необходимости перенаправлять пользователя на страницу «авторизации».Вот несколько примеров того, что может содержать подписанный запрос:

Пользователь не авторизовал приложение:

signed_request = 
                {
                    "algorithm":"HMAC-SHA256",
                    "issued_at":1299083443,
                    "user":{"country":"ca","locale":"en_US","age":{"min":21}
                }

Пользователь уже авторизовал приложение:

signed_request =   {
                    "algorithm":"HMAC-SHA256",
                    "expires":1299092400,
                    "issued_at":1299085507,
                    "oauth_token":access_token,
                    "user":{"country":"ca","locale":"en_US","age":{"min":21}},
                    "user_id":user_id
                }

Если вы не видите user_id и oauth_token, вы можете использовать технику JavaScript window.top.location.href.Если вы видите user_id и oauth_token, то нет необходимости просить пользователя аутентифицировать ваше приложение, потому что он / она уже это сделал.Другими словами, если пользователь авторизовал ваше приложение 1 января, а затем вернулся 10 января, то подписанный подпись уже будет содержать user_id и oauth_token при посещении 10 января.

Это метод, который яиспользовать.Надеюсь, это поможет.

ОБНОВЛЕНО 7 марта 2011 г. в ответ на комментарий BrynJ ниже.

Чтобы получить подписанный запрос, вы должны убедиться, что «OAuth 2.0 for Canvas»"включен в настройках вашего приложения (его можно найти на вкладке" Дополнительно "при редактировании настроек здесь http://www.facebook.com/developers/apps.php). Это включено по умолчанию для всех новых приложений, но если у вас старое,Вам нужно будет включить его самостоятельно. Кроме того, обратите внимание на параметр «POST for Canvas» на той же вкладке «Дополнительно». Если он включен, то подписанный_просмотр передается в теле POST (например, signature_request = 12345). Если он отключенЗатем в строке запроса передается подписанный подпись.

Получив подписанную подпись, вам нужно будет проверить и декодировать ее, чтобы получить user_id и oauth_token. У Facebook есть действительно хороший пример:

http://developers.facebook.com/docs/authentication/signed_request/

Кстати, вы захотите включить «POST for Canvas», так как Facebook будет переключать все приложения iframe на это 12 марта. Подробнее здесь: http://developers.facebook.com/docs/canvas/post/

...