我正在使用没有设计的omniauth进行身份验证,因为我喜欢它的简单性。除了omniauth-facebook,我使用omniauth-identity来提供email / pw-authentication railscast on omniauth-identity描述了如何设置自定义注册和登录页面。但仍可访问identity(/ auth / identity和/ auth / identity / register)提供的默认路由。
我想让这些在我的控制之下,因为我只想让受邀用户注册。有没有办法覆盖机架中间件提供的那些路由? 试着
match "/auth/identity", to: "somewhere#else"
没有办法!
是否有配置可以关闭这些默认路由?文档没有提供任何有关此内容的详细信息......
不幸的是我对Rack很新,所以我还没有足够的洞察力来解决这个问题! 如果有人能指出我正确的方向,我会很高兴的!
答案 0 :(得分:6)
OmniAuth
策略对象有一个方法request_phase
,它生成一个html表单并将其显示给用户。对于“omniauth-identity”策略,这将是您在/auth/identity
网址上看到的表单。
您可以覆盖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...
答案 1 :(得分:4)
除了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
答案 2 :(得分: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