我想做一些非常具体的事情。我搜索了但没有找到答案。我是Rails的初学者,所以请友善:) 我正在Rails 5.2(有设计)的网站上工作,该网站必须可以在本地网络中访问,也必须具有公共访问权限。 专用ip和公用ip以及未经身份验证的用户的路由必须不同。 我正在尝试做这样的事情:
if (unauthenticated && public_network?)
{ root to: 'pages#public' }
{ "*path" to: 'pages#public' }
else
{ root to: 'pages#home' }
对于网站的所有路由,外部人员都将被重定向到特定的已登录界面(具有不同布局的pages#public)。 当他们通过身份验证或使用私有IP时,网站将以pages#home
进行响应所以我试图在route.rb的第一行中做类似的事情:
unauthenticated :user do
// Catch all routes and redirect to public method in pages ctrl for all publics ips
get '*path', to: 'pages#public',
constraints: lambda { |request| !request.remote_ip.in? ['127.0.0.1' , '172.18.0.1'] }
get '/', to: 'pages#public',
constraints: lambda { |request| !request.remote_ip.in? ['127.0.0.1' , '172.18.0.1'] }
// And for the unauthenticated users on the Lan :
root to: 'pages#home'
end
然后是其余的路由行为...
我坚信这是可行的,但没有成功。 它仍然适用于private ip,但是在public ip上,即使经过身份验证,我也始终重定向到pages#public。 我乐于接受所有可以帮助我的解决方案。
谢谢:)
答案 0 :(得分:0)
类似的事情应该起作用:
unauthenticated :user do
# `public_network?` is a placeholder for your specific checks
constraints ->(request) { public_network? } do
root to: 'pages#public'
get '*path', to: 'pages#public'
end
end
authenticated :user do
root to: 'pages#home'
get '/', to: 'pages#home'
end
另一个问题是"public"
和"home"
都是同一控制器的动作。不过,对于测试应用程序而言,这并不是什么大问题。