如何在Ruby On Rails API中禁用授权标头缓存?

时间:2015-10-23 08:30:02

标签: ruby-on-rails ruby ruby-on-rails-3

我在Ruby On Rails中开发了stateless RESTful API。它的工作方式是,当您登录时,您会收到一个令牌,然后您可以将其用作Authorization标头来发出请求。

API中有两种不同的角色:管理员角色和客户角色。

我所做的是为路由添加一些角色约束,这样我可以根据特定角色指向控制器中不同方法的相同端点,如下所示(来自config / routes.rb):

get '/courses', to: 'courses#admin_index', constraints: admin_constraints get '/courses', to: 'courses#client_index', constraints: client_constraints

约束是这样实现的:

admin_constraints = RoleRouteConstraint.new(User::ROLES[:admin]) client_constraints = RoleRouteConstraint.new(User::ROLES[:client])

当RoleRouteConstraint检索授权标头令牌所属的用户时,检查它的角色,如果角色与构造函数参数匹配,则返回true。

问题在于,当我切换角色时,Rails会以某种方式缓存我之前角色的Authorization标头。这意味着在我登录管理面板(作为管理员)后,与界面交互,然后进入客户端界面,执行一些操作,API将保持我的角色作为客户端。如果我然后尝试执行特定于管理员的操作,如下所示:

put '/courses/:id', to: 'courses#update', constraints: admin_constraints

我无法使用,因为API认为我仍然以客户端身份登录。问题是,如果我重新启动我的rails服务器它将工作。本地我正在使用POW,在暂存/生产中我正在使用apache2。因此,如果我执行Rails重新启动并以管理员身份重复请求,那么它将起作用。

有人有任何想法吗?

0 个答案:

没有答案