переопределить /auth/identity-page учетной записи omniauth

Я использую omniauth без разработки для аутентификации, так как мне нравится его простота. В дополнение к omniauth-facebook я использую omniauth-identity для аутентификации по электронной почте/pw.
railscast на omniauth-identity описывает, как настроить персонализированную страницу регистрации и входа. Но маршруты по умолчанию, предоставляемые идентификатором (/auth/identity и /auth/identity/register), по-прежнему доступны.

Я хотел бы, чтобы они были под моим контролем, так как я хочу, чтобы регистрировались только приглашенные пользователи. Есть ли способ переопределить маршруты, предоставленные промежуточным программным обеспечением стойки?
Попытка просто

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

не делает трюк!

Может быть, есть конфигурация для отключения этих маршрутов по умолчанию? Документация не дает никаких подробностей об этом...

К сожалению, я новичок в Rack, поэтому у меня пока недостаточно знаний, чтобы решить эту проблему самостоятельно!
Буду рад, если кто-нибудь укажет мне правильное направление!


person wdspkr    schedule 13.01.2012    source источник
comment
В конце концов, я просто дал приглашенным пользователям парольную фразу, так что не имело большого значения, что исходный сайт все еще был доступен...   -  person wdspkr    schedule 22.06.2012


Ответы (3)


Объект стратегии OmniAuth имеет метод request_phase, который создает html-форму и показывает ее пользователю. Для стратегии "omniauth-identity" это будет форма, которую вы видите по адресу /auth/identity url.

Вы можете переопределить метод request_phase и заменить генератор форм, например, перенаправлением на вашу пользовательскую страницу входа (при условии, что она доступна по адресу /login). Поместите следующее вместе с кодом инициализации omniauth:

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

# Your OmniAuth::Builder configuration goes here...
person 1gor    schedule 02.05.2012
comment
Если вы хотите переопределить фазу запроса, вы, вероятно, захотите сделать то же самое и с registration_phase и убедиться, что параметр registration_path не установлен. - person iain; 06.07.2012

В дополнение к 1gors и iains ответ:

«/auth/identity/register» также обслуживается с помощью GET, чтобы переопределить, мне пришлось:

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
person svoop    schedule 31.03.2013
comment
+1 Я добавил это в /config/initializers/omniauth.rb под блоком Rails.application.config.middleware.use OmniAuth::Builder do ... end вместе с ответом @1gors. Спасибо :о) - person Andrew; 16.11.2014

Вы можете установить метод в omniauth.rb

:on_login => SessionsController.action(:new)

Например:

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
person Serhiy Nazarov    schedule 29.11.2014