2012-01-13 84 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