Ruby Sinatra应用/hello端点无故触发403认证问题求助
问题原因及解决办法
核心问题
你大概率是启动了ArticlesController而非ApplicationController!因为ArticlesController继承自ApplicationController,它会自动继承父类的所有路由(包括/hello),同时子类中定义的全局before过滤器(authenticate!)会作用于所有属于该子类的路由——自然也包括继承来的/hello,所以访问这个端点会触发认证检查。
另外如果你的应用把两个控制器挂载到了同一个根路径下,也会出现子类过滤器干扰父类路由的情况,但最常见的还是启动了错误的控制器。
解决办法
- 启动正确的控制器:确保你的启动文件(比如
config.ru或app.rb)中运行的是ApplicationController,代码示例:run ApplicationController - 给子类控制器设置路由前缀:如果需要同时使用两个控制器,在
ApplicationController中给ArticlesController挂载独立前缀,这样子类的过滤器只会作用于自己的路由范围:map '/articles' do run ArticlesController end - 限定过滤器的作用范围:把
ArticlesController中的全局before改成路由限定的形式,只对/articles开头的路由生效:before '/articles' do authenticate! end
内容的提问来源于stack exchange,提问作者jedi
相关产品推荐
相关产品推荐

