我已经成功使用控制器规范使用之前的过滤器来处理子域
before do
request.host = "an_account.example.com"
end
当用户试图访问他们不属于的子域时,他们会被注销并发送回设计的登录行动,即子域名下的ISNT,即
www.example.com/users/sign_in
浏览器中的一切正常,被重定向的偷偷摸摸的用户被禁止输入不相关的子域,而是重定向到登录表单。
但是我的控制器规格失败
“预期的重定向响应 http://example.com/users/sign_in但是是重定向的 http://an_account.example.com/users/sign_in“
有人可以为此提供帮助吗?
这是授权用户的before_filter
def authorize_account_subdomain!
if current_account.subdomain != request.subdomain
sign_out
flash[:warning] = t('errors.unauthorized')
redirect_to new_user_session_url(:subdomain => false)
end
end
和测试
context 'when signed_in' do
let(:user) { create(:user_with_account) }
let(:proposal) { create(:proposal, :account => user.account) }
let(:subdomain) { user.account.subdomain }
before do
sign_in user
end
context "when accessing other subdomain" do
before do
other_subdomain = "other_subdomain"
@request.host = "#{other_subdomain}.example.com"
end
it "can not access show action" do
post :show, :id => 1
access_denied!
end
end
end
#test helper
def access_denied!
response.should redirect_to new_user_session_url(:subdomain => false)
flash[:warning].should == I18n.t('errors.unauthorized')
end
答案 0 :(得分:0)
当我看到这个时,我看到查询是正确的,即/ users / sign_in在两种情况下都是相同的。所以这告诉我它的:subdomain =>在您的网址助手中为false。
请参阅此答案以获得更多说明