我正在尝试使用现有的身份验证系统来保护
我在
然后看一下
/sidekiq
路由。我正在使用 Rails-api 的 JWT。我能够读取 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>
是否有办法使Token可以持久化用于后续请求?我似乎不能在该lib文件中使用Rails会话。
window.authToSidekiq()
,它将向端点发送POST请求,将令牌保存在会话中,然后进行302重定向,带我到 /sidekiq。 - Marossession[:token] = token
后,在约束中request.session
似乎为空。这两个会话可能是不同的东西吗? - Marosrequest.cookies
确实有一个rack.session
的cookie,但似乎是一个加密很长的值。 - Maros