将rails路由限制为只能在内部调用
Constraining a rails route to only be called internally
在Rails中使用Javascript, JQuery和AJAX时,我们通常有一些内部路由/url,我们可以调用它们作为助手。
例如,如果我有一个使用Twitter提前输入的搜索栏,我可能会使用像/search/suggestions
这样的内部路由,我的Javascript可以调用它来预加载一些提前输入的建议。如何防止这样的路由被外部/公共用户调用?重要的是,只有"内部应用"才能访问这条路由。
我尝试将路由限制到localhost,运气不佳-
constraints(ip: /127.0.0.1/) do
get "/search/suggestions", to: "search#load_suggestions"
end
Rails抱怨它找不到那个路由,可能是因为约束。
ActionController::RoutingError (No route matches [GET] "/search/suggestions"):
actionpack (4.2.2) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
actionpack (4.2.2) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.2.2) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.2.2) lib/rails/rack/logger.rb:20:in `block in call'
谢谢!
使用浏览器,任何人都可以在url中键入任何内容。那么,如何阻止某人访问他们无权访问的url/路由/页面呢?
你必须在控制器执行动作之前钩住请求。如果进入控制器的请求来自有效的请求者,则执行该操作,否则显示消息并重定向,或您需要的任何操作。
我有一个应用程序,用户只能看到自己的饲料,而不是其他人;只编辑自己的帖子,等等。用户状态由会话控制器维护。
你的twitter typeahead请求者将需要一些东西来标识自己,一个可以被验证的状态进入控制器。这可以通过多种方式实现。我不会去猜测你的应用程序是如何设置的。
在控制器中使用before_action来测试有效的请求者,在你的情况下是你的twitter typeahead:
class YourController < ApplicationController
before_action :validate_access
private
def validate_access
unless twitter_user?
flash[:danger] = "You do not have access to this feature."
redirect_to root_url (whatever redirect you need)
end
end
捕获所有301重定向——安全网
在路由中,我总是喜欢有一个全面的重定向,以防有人在浏览器中键入无效的URL。如果你没有这个,而有人手动编辑了一个路由中不存在的URL,你的应用会崩溃,并显示route not found,这是很难看的:routes.rb
# This is a catchall 301 redirect to home (does not help with (e) type errors)
get "*path", to: redirect('/')
可能有其他的解决方案,可能是,但给这个想法一个尝试,如果它似乎对你有用。如果您有任何问题,请告诉我。
相关文章:
- 如何在类内部调用类的方法
- 如何在更新面板内部调用/触发javascript函数<触发器>标签
- 在闭包内部调用父函数
- 在条件内部调用JQuery函数
- 方法不在另一个方法内部调用
- 在处理元素单击事件期间,在循环内部调用window.open()
- 在angularjs中的控制器内部调用multipe$http
- AngularJs:在内部调用$http或$resource时,让方法同步返回
- 在Javascript数组内部调用URL变量
- 在侦听器内部调用函数时出现问题(onClick)
- 如何使用Ajax内部调用JQuery在函数中获取返回值
- 在方法内部调用另一个方法 ReactJS
- Redux 操作创建者在另一个内部调用一个
- 在 ajax 内部调用 ajax
- 节点异步仅在 node-lambda 内部调用第一个函数
- 如何在内部异步函数完成运行后调用外部函数返回
- 节点.JS事件发射器 - 在内部调用方法
- 如何在内部调用快速导出方法
- Javascript框架不能真正在内部调用方法
- 将rails路由限制为只能在内部调用