Я некоторое время боролся с аутентификацией Facebook для приложения на основе холста. Мой подход заключается в следующем:
- Проверьте сеанс пользователя на наличие токена доступа.
- Проверьте файлы cookie пользователя Facebook на наличие токена доступа.
- Проверьте параметры для
signed_request
.
Если токен доступа найден во время любого из этих 3 шагов:
- I make a call to the graph API requesting the
/me
resource.- If the call is successful, the user is logged in.
- Если вызов завершается сбоем (вызывает
OAuthException
), я запрашиваю новый токен доступа, перенаправляя пользователя на конечную точку Facebook OAuth для получения кода, а затем получаю новый токен доступа путем обмена этим кодом.
Если маркер доступа не найден в сеансе, файлах cookie или signed_request
, я показываю целевую страницу.
Правильная ли это процедура? Я заметил, что часто в параметрах отсутствует signed_request
, если срок действия токена доступа пользователя истек. Метод, одобренный Facebook для запроса нового токена доступа, приводит к 2 перенаправлениям, обращенным к пользователю, а также к обмену API, что кажется немного тяжелым.
Настройка, в которой я работаю:
- Рельсы v3.0.8
- Драгоценный камень коала v1.2.1
Я следовал этим руководствам: