2013-04-02 13 views
6

mam to w routes.rb:Szyny trasa przestrzeni nazw w omniauth

namespace :api do 
    namespace :v1 do 
    ... 
    devise_for :users, constraints: { format: :json }, 
     :controllers => { :omniauth_callbacks => "auths" } 
    ... 
    end 
end 

i produkuje między innymi, te trasy:

new_api_v1_user_confirmation GET  /api/v1/users/confirmation/new(.:format)   api/v1/confirmations#new {:format=>:json} 
          GET  /api/v1/users/confirmation(.:format)    api/v1/confirmations#show {:format=>:json} 
api_v1_user_omniauth_authorize   /users/auth/:provider(.:format)     auths#passthru {:provider=>/facebook|twitter|linkedin/, :format=>:json} 
api_v1_user_omniauth_callback   /users/auth/:action/callback(.:format)   auths#(?-mix:facebook|twitter|linkedin) {:format=>:json} 

Jak mógłby get ostatnie dwie trasy przestrzeni nazw, coś jak:

/api/v1/auth/:provider(.:format) 
/api/v1/auth/:provider/callback(.:format) 
+0

Czy kiedykolwiek to rozumiesz? Mam dokładnie ten sam problem. –

+0

Skończyło się na tym, że z mojej aplikacji konsumenckiej API do ip_of_api_server/users/auth bez przestrzeni nazw api – juanpastas

+0

FWIW, po prostu postanowiłem użyć omniauth BEZ funkcji devise i umieścić go w mojej własnej przestrzeni nazw, a następnie ręcznie wykonać uwierzytelnianie. Ale robimy też szkielet/marionetkę, a program też nie lubi grać dobrze. –

Odpowiedz

2

Guess należy przekonwertować moje komentarze do odpowiedzi:

Dla naszej aplikacji wykonujemy czystą aplikację json api ze szkieletem/marionetką. Aby uzyskać OAuth w pracy z devise - usunąłem go z opracowania. :) Usunięto omniauthable własność, którą ustawiłem i usunąłem ustawienia omniauth z moich initializers/devise.rb. Następnie czytając na stronie omniauth zaimplementowałem ją samodzielnie.

Moja api mieszka pod "/ api/v1"

  1. stworzył inicjalizatory/plik omniauth.rb listą moich dostawców i kluczy. Dla każdego dostawcy nadałem mu również właściwość: path_prefix => "/ api/v1/auth".
  2. Utwórz kontroler zwrotów w moim api o nazwie api/v1/oauth_controller.rb To było poprawnie nazwane z modułami i zawierało moją ścieżkę zwrotną z usług.
  3. Zaktualizowałem trasy, aby skonfigurować trasę oddzwonienia dla omni. Zobacz tutaj: gist.github.com/DaveSanders/5835642
  4. W ramach OAuthController.create Zużyłem dane od dostawcy i wykonałem podstawowy proces "czy użytkownik sieci społecznościowej istnieje i ma przypisane konto?" jeśli tak, zaloguj się przez użytkownika devise's user.sign_in? Jeśli nie, utwórz użytkownika, a następnie zaloguj się.
  5. Przekieruj z powrotem do mojej aplikacji, która następnie ponownie uruchomi sieć szkieletową, która może następnie uzyskać dane zalogowanego użytkownika i użyć ich w razie potrzeby.

Twój realizacja może się różnić, ale sposób obsłużyć moje konta OAuth jest umieścić je w swoich tabelach (Twitters, Facebooks, etc), a następnie połączyć je w moim opracować użytkownika. W ten sposób mogę powiązać wiele kont i użytkownik może zalogować się do dowolnego z nich.

Należy także pamiętać, aby ustawić twitter/facebook oddzwanianie do czegoś jak:

http://127.0.0.1:3000/api/v1/auth/twitter/callback

dopasować swoją trasę w dev.

Mam nadzieję, że to pomoże innym. Jeśli zapomniałem kroku lub zgubiłeś się, proszę zapytaj.

+0

To nie działa dla mnie. Poniżej znajduje się lista dostawców: '# config/initializers/omniauth.rb Rails.application.config.middleware.użyj OmniAuth :: Builder do dostawca: facebook, ENV ['FACEBOOK_KEY'], ENV ['FACEBOOK_SECRET'],: path_prefix => "/ api/v1/auth" end' a tutaj jest trasa z tras rake => 'GET /api/v1/auth/:provider/callback(.:format) devise_token_auth/omniauth_callbacks # omniauth_success Przekierowanie GET /api/v1/auth/:provider(.:format) (301)' – vipin8169

+0

nadal otrzymuję ten błąd = > Brak trasy odpowiada [POST] "/ api/v1/auth/facebook" – vipin8169