2012-01-13 53 views
6

我使用omniauth而無需身份驗證,因爲我喜歡它的簡單性。除了omniauth-facebook之外,我還使用omniauth-identity來提供email/pw-authentication。
railscast on omniauth-identity介紹瞭如何設置自定義的註冊和登錄頁面。但由identity(/ auth/identity和/ auth/identity/register)提供的默認路由仍然可以訪問。覆蓋omniauth身份的「/ auth/identity」頁面

我想這些在我的控制下,因爲我只想讓被邀請的用戶註冊。有沒有辦法覆蓋機架中間件提供的路由?
試圖做到

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

不會做的伎倆!

是否有配置可以關閉這些默認路由?該文件沒有給出任何細節...

不幸的是,我是相當新的機架,所以我沒有足夠的洞察力,我自己解決這個問題!
我很高興,如果有人能指引我正確的方向!

+0

最後我只是給了被邀請的用戶口令,所以它並沒有真正的問題,有是原來的身份現場仍然可以訪問... – wdspkr 2012-06-22 09:04:05

回答

6

一個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... 
+0

如果你想覆蓋請求階段,那麼你」我想也可以用'registration_phase'來做同樣的事情,並且確保'registration_path'選項不是*設置的。 – iain 2012-07-06 11:25:16

+0

+1感謝這 – Trip 2012-07-20 10:47:04

4

除了1gors和iains答案:

「/認證/身份/註冊」的送達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 
+0

+1我將它添加到'Rails.application.config.middleware.use OmniAuth :: Builder do ... end'塊下的'/ config/initializers/omniauth.rb',以及@ 1gors的答案。感謝:o) – Andrew 2014-11-16 14:01:12

1

可以在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