我有一个 sinatra 应用程序,安装在我的 rails 应用程序中。
match "/my_sinatra_app" => MyApp, :anchor => false
有没有办法在对所有/my_sinatra_app
url 的 rails 进行过滤之前执行 Rails。?
我有一个 sinatra 应用程序,安装在我的 rails 应用程序中。
match "/my_sinatra_app" => MyApp, :anchor => false
有没有办法在对所有/my_sinatra_app
url 的 rails 进行过滤之前执行 Rails。?
这是一个老问题,但我在 Sidekiq Web 上遇到了类似的问题。
为了解决这个问题,我们可以使用路由约束。
在您的路线文件中,将路线约束到已安装的应用程序:
require "sidekiq/web"
mount Sidekiq::Web, at: "/sidekiq", constraints: AdminConstraint.new
然后在 中AdminConstraint
,您需要放置before_filter
适用于您的应用程序身份验证的调用。因此,例如,如果我的 中有以下内容ApplicationController
:
class ApplicationController < ActionController::Base
before_filter :authenticate
def authenticate
user = User.find_by(email: params[:email])
if user && user.authenticate(params[:password])
session[:user_id] = user.id
end
end
end
我会将以下内容放入约束中:
class AdminConstraint
def matches?(request)
return false unless request.session[:user_id]
user = User.find(request.session[:user_id])
# Only show if user is a super admin
user.present? && user.super_admin?
end
end