我正在尝试使用现有的身份验证系统来保护/sidekiq
路由。我正在使用JWT和Rails-api。我能够读取JWT令牌以检查用户是否具有管理员角色,但它仅适用于初始请求。 Sidekiq面板中的后续请求检索CSS和JS,但它们失败,因为令牌未传递给它们。
我的routes.rb
中有以下路线:
mount Sidekiq::Web => '/sidekiq', constraints: AdminConstraint.new
然后lib/admin_constraint.rb
:
class AdminConstraint
def matches?(request)
token = request.params['token']
unless token
puts 'AdminConstraint: No token in params found'
return false;
end
user = Knock::AuthToken.new(token: token).entity_for(User)
unless user
puts "AdminConstraint: No user found for token #{token}"
end
if user.admin?
puts "AdminConstraint: User with user_id #{user.id} is an admin, access granted"
true
else
puts "AdminConstraint: User with user_id #{user.id} is NOT an admin, rejecting"
false
end
end
end
我正在我的浏览器中访问该路线,如下所示:https://example.com/sidekiq?token=<token>
我是否可以通过某种方式为后续请求保留令牌?我似乎无法在此lib文件中使用Rails会话。
答案 0 :(得分:1)
我是否可以通过某种方式为后续请求保留令牌?
这不能/不应该在您的路线中的约束内完成。
您需要提供另一个端点,该端点在会话中设置一些内容以显示会话已经过身份验证,然后您将在路由约束中进行检查。
这可以在控制器或机架中间件中完成。