переопределить "/ auth / identity" - страницу идентичности omniauth - PullRequest
6 голосов
/ 13 января 2012

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

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

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

не сработает!

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

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

Ответы [ 3 ]

6 голосов
/ 02 мая 2012

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

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

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

# Your OmniAuth::Builder configuration goes here...
4 голосов
/ 31 марта 2013

В дополнение к ответу 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
1 голос
/ 29 ноября 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
...