2015-01-12 7 views
8

У меня есть приложение rails, которое обрабатывает api для клиента iOS. Я использую devus, omniauth-facebook для рельсов. для клиента iOS я использую учетные записи и социальные рамки для аутентификации facebook. Я схватил маркер oauth и передал его рельсам через обратный вызов omniauth для аутентификации, но я получил эту ошибку. Может ли кто-нибудь, пожалуйста, направить меня на то, что я делаю неправильно? ниже вот журнал, который я получаю.omniauth для аутентификации рельсов и ios

Started POST "https://stackoverflow.com/users/auth/facebook/callback" for ::1 at 2015-01-12 10:59:22 +0800 I, [2015-01-12T10:59:22.928323 #99294] INFO -- omniauth: (facebook) Callback phase initiated. E, [2015-01-12T10:59:22.929737 #99294] ERROR -- omniauth: (facebook) Authentication failure! no_authorization_code: OmniAuth::Strategies::Facebook::NoAuthorizationCodeError, must pass either a code (via URL or by an fbsr_XXX signed request cookie) Processing by Users::OmniauthCallbacksController#failure as/Parameters: {"access_token"=>"tokenFromACFBiOS"} Redirected to localhost:3000/users/sign_in Completed 302 Found in 4ms (ActiveRecord: 0.0ms) 

Вот сущность моего iOS и кода бэкэнд. https://gist.github.com/chocnut/ae6f415accd95c8ef415

+0

можете ли вы разместить свой '/ config/initializers/omniauth.rb'? –

ответ

-1

Когда вы создаете приложение facebook (fb), вы должны указать, где находится обратный вызов URL, возможно, вы установили его в fb как: http://localhost:3000/bla/bla Он отлично работает, если вы тестируете свою собственную машину, но чтобы иметь возможность тест на вашем устройстве ios, тогда вы должны изменить на что-то вроде ip вашего устройства (пример 192.168.1.1)

0

Мне удалось достичь этого, используя самодельный маркер omniauth-facebook-access-token. https://github.com/SoapSeller/omniauth-facebook-access-token

Создайте еще один поставщик oauth в своем инициализаторе разработки под названием «facebook_access_token», он может использовать те же учетные данные, что и поставщик facebook.

Опубликовать токен как параметр 'access_token'. Используйте строку запроса? Format = json в URL-адресе обратного вызова, если вы хотите, чтобы окончательный ответ от вашего приложения был возвращен как JSON.