2015-01-12 21 views
8

Mam aplikację szyny, która obsługuje api dla klienta iOS. Używam devise, omniauth-facebook dla szyn. dla klienta iOS używam kont i struktury społecznościowej do uwierzytelniania facebook. Złapałem token Oautha i przekazałem go do szyn za pośrednictwem wywołania zwrotnego omniauth w celu uwierzytelnienia, ale otrzymałem ten błąd. Czy ktoś może mi doradzić, co robię źle? Poniżej znajduje się dziennik, który dostaję.omniauth do uwierzytelniania szyn i 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) 

Oto sedno mojego iOS i kodu backendu. https://gist.github.com/chocnut/ae6f415accd95c8ef415

+0

czy możesz zamieścić swoje '/ config/initializers/omniauth.rb'? –

Odpowiedz

-1

Po utworzeniu aplikacji facebook (fb), powinieneś wskazać, gdzie znajduje się wywołanie url, prawdopodobnie ustawisz ją w fb jako: http://localhost:3000/bla/bla Działa to dobrze, jeśli testujesz na własnej maszynie, ale możesz to zrobić przetestuj w swoim urządzeniu ios, a następnie zmień wartość tego parametru, na przykład IP twojego komputera (np. 192.168.1.1)

0

Udało mi się to osiągnąć za pomocą Gem Gem'a do omniuth-facebook-access-token. https://github.com/SoapSeller/omniauth-facebook-access-token

Utwórz kolejnego dostawcę oauth w inicjał programistyczny o nazwie "facebook_access_token", może używać tych samych poświadczeń, co dostawca Facebooka.

Umieść token jako parametr "access_token". Użyj ciągu zapytania? Format = json w adresie wywołania zwrotnego, jeśli chcesz, aby ostateczna odpowiedź z aplikacji została zwrócona jako JSON.