2015-01-12 10 views
8

Ich habe eine Rails-App, die die API für einen iOS-Client behandelt. Ich benutze Devise, Omniauth-Facebook für Schienen. Für den iOS-Client verwende ich Accounts und Social Framework für die Facebook-Authentifizierung. Ich habe den oauth-Token gepackt und ihn über den omniauth-Callback an die Rails weitergeleitet, um mich zu authentifizieren, aber ich habe diesen Fehler bekommen. Kann mir bitte jemand sagen, was ich falsch mache? hier unten ist das Protokoll, das ich bekomme.omniauth für Schienen und IOS-Authentifizierung

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) 

Hier ist der Kern meines iOS und Backend-Code. https://gist.github.com/chocnut/ae6f415accd95c8ef415

+0

können Sie Ihre '/ config/initializers/omniauth.rb' posten? –

Antwort

-1

Wenn Sie ein Facebook (fb) App erstellt, sollten Sie angeben, wo die URL Rückruf befindet, wahrscheinlich Sie es in fb gesetzt, wie: http://localhost:3000/bla/bla Es funktioniert gut, wenn Sie in Ihrem eigenen Rechner zu testen sind aber in der Lage sein test in Ihrem iOS-Gerät dann sollten Sie ändern localhost für etwas wie die IP-Adresse Ihres Computers (Ex. 192.168.1.1)

0

Ich konnte dies mit dem omniauth-facebook-access-Token Gem erreichen. https://github.com/SoapSeller/omniauth-facebook-access-token

Erstellen Sie einen anderen oauth-Provider in Ihrem Geräte-Initialisierer mit dem Namen "facebook_access_token". Er kann dieselben Anmeldeinformationen wie der Facebook-Anbieter verwenden.

Geben Sie das Token als Parameter 'access_token' ein. Verwenden Sie die Abfragezeichenfolge? Format = json in der Rückruf-URL, wenn die endgültige Antwort Ihrer App als JSON zurückgegeben werden soll.