JWT Auth with Rails Sidekiq 管理面板
JWT Auth with Rails Sidekiq admin panel
我正在尝试使用我现有的身份验证系统来保护 /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>
有什么方法可以为后续请求保留令牌?我似乎无法在此 lib 文件中使用 Rails 会话。
Is there some way I can persist the token for subsequent requests?
这不能t/shouldn在您的路线限制范围内完成。
您需要提供另一个端点,它会在会话中设置一些内容以表明会话已通过身份验证,然后您将在路由约束内进行检查。
这可以在控制器或机架中间件中完成。
我正在尝试使用我现有的身份验证系统来保护 /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>
有什么方法可以为后续请求保留令牌?我似乎无法在此 lib 文件中使用 Rails 会话。
Is there some way I can persist the token for subsequent requests?
这不能t/shouldn在您的路线限制范围内完成。
您需要提供另一个端点,它会在会话中设置一些内容以表明会话已通过身份验证,然后您将在路由约束内进行检查。
这可以在控制器或机架中间件中完成。