【发布时间】:2014-09-07 02:49:32
【问题描述】:
我在 Sinatra 中有一个 API,使用中间件使用令牌进行全局限制身份验证。 该中间件在 before 语句中插入身份验证检查,以便全局保护所有内容,而无需在每个路由定义中添加检查。
before do
denied unless
authorized? or
env['PATH_INFO'] == '/auth/login' or
env['REQUEST_METHOD'] == 'OPTIONS' # For AngularJS headers checks
end
但现在我有一些路线需要从这个全局限制中排除(只有 2 或 3 条),但不知道该怎么做。
我首先想到的是 Sinatra 条件:http://www.sinatrarb.com/intro.html#Conditions,但由于它在 before 语句中,我无法在之前采取措施避免这种情况。
然后我找到了这个解决方案:Before filter on condition
但这并不是一种真正干净的方法,而且它不适用于中间件和模块化 Sinatra 应用程序。
所以在搜索了很多之后,我需要一些帮助和建议。
如何做到这一点,也许在我的中间件中使用助手、条件和一些修改?
【问题讨论】:
-
身份验证和授权是两件不同的事情,但从编写方式来看,它们似乎是混为一谈的。只是说。
-
@iain 不是。所有的 API 都需要身份验证,所以要么您已经获得授权,要么您需要进行身份验证,这就是这样做的目的。
-
好的,谢谢你清理它:)
标签: ruby authentication sinatra