Некоторое время я боролся за проверку подлинности Facebook для приложения canvas.Мой подход заключается в следующем:
- Проверьте сеанс пользователя на наличие токена доступа.
- Проверьте куки пользователя Facebook на наличие токена доступа.
- Проверьте параметры дляa
signed_request
.
Если токен доступа обнаружен во время любого из этих 3 шагов:
- Я вызываю API-интерфейс графа, запрашивая ресурс
/me
, - Если вызов успешен, пользователь входит в систему.
- Если вызов не удается (вызывает
OAuthException
), я запрашиваю новый токен доступа, перенаправив пользователя на OAuth Facebook.конечная точка для получения кода, а затем получения нового токена доступа путем обмена этим кодом.
Если токен доступа не найден в сеансе, файлах cookie или signed_request
, яотобразить целевую страницу.
Это правильная процедура? Я заметил, что часто в параметрах отсутствует signed_request
, если срок действия маркера доступа пользователя истек.Метод Facebook одобряет запрос свежего токена доступа, что приводит к 2 перенаправлениям, обращенным к пользователю, а также обмену API, который кажется немного тяжелым.
Настройка, в которой я работаю:
- Rails v3.0.8
- Koala gem v1.2.1
Я следовал этим инструкциям: