2012-01-13 8 views
6

Używam omniauth bez opracowania w celu uwierzytelnienia, ponieważ lubię to w prostocie. Oprócz omniauth-facebook używam identyfikatora omniauth, aby oferować uwierzytelnianie e-mail/pw.
Urządzenie railscast on omniauth-identity opisuje sposób konfiguracji dostosowanej strony rejestracji i logowania. Ale domyślne trasy dostarczane przez tożsamość (/ auth/identity i/auth/identity/register) są nadal dostępne.przesłonięcie strony "/ auth/identity" tożsamości omniahuta

Chciałbym mieć je pod kontrolą, ponieważ chcę tylko pozwolić zaproszonym użytkownikom zarejestrować się. Czy istnieje sposób na zastąpienie tych tras dostarczanych przez oprogramowanie pośredniczące?
Próbuje tylko

match "/auth/identity", to: "somewhere#else" 

nie załatwi!

Czy istnieje możliwość wyłączenia tych domyślnych tras? Dokumentacja nie podaje żadnych szczegółów na ten temat ...

Niestety, jestem całkiem nowy w Rack, więc nie mam jeszcze wystarczającego wglądu, aby rozwiązać ten problem na własną rękę!
Byłbym szczęśliwy, gdyby ktoś mógł wskazać mi właściwy kierunek!

+0

W końcu po prostu dał zaproszonych Użytkownikom hasło, więc to nie miało znaczenia, że ​​nie była oryginalna strona tożsamość nadal dostępne ... – wdspkr

Odpowiedz

6

Obiekt strategii OmniAuth ma metodę request_phase, która generuje formularz html i wyświetla go użytkownikowi. Dla strategii "tożsamości omniautów" byłaby to forma widoczna pod adresem URL /auth/identity.

Można zastąpić metodę request_phase i zamienić generator formularzy na przykład na przekierowanie na niestandardową stronę logowania (zakładając, że jest ona dostępna pod adresem URL /login). Umieść następujący wraz z omniauth kodzie inicjującym:

module OmniAuth 
    module Strategies 
    class Identity 
    def request_phase 
     redirect '/login' 
    end 
    end 
end 
end 

# Your OmniAuth::Builder configuration goes here... 
+0

Jeśli chcesz nadpisać fazy żądania wtedy” Prawdopodobnie będziesz chciał zrobić to samo również z 'registration_phase' i upewnić się, że opcja' registration_path' jest * nie * ustawiona. – iain

+0

+1 Dzięki za to – Trip

4

Oprócz 1gors i iains odpowiedź:

"/ auth/tożsamość/register" jest podawane z GET, jak również, aby zastąpić, musiałem :

class OmniAuth::Strategies::Identity 
    alias :original_other_phase :other_phase 
    def other_phase 
    if on_registration_path? && request.get? 
     redirect '/sign_up' 
    else 
     original_other_phase 
    end 
    end 
end 
+0

+1 Dodałem to do '/ config/initializers/omniauth.rb' pod blokiem' Rails.application.config.middleware.use OmniAuth :: Builder do ... end', razem z @ 1gors odpowiedź. Dzięki: o) – Andrew

1

można ustawić metodę w omniauth.rb

:on_login => SessionsController.action(:new) 

na przykład:

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :identity, 
      :fields => [:nickname], 
      :on_login => SessionsController.action(:new), 
      :on_registration => UsersController.action(:new), 
      :on_failed_registration => SessionsController.action(:registration_failure) 
end 
Powiązane problemy