1

我有一个 sinatra 应用程序,安装在我的 rails 应用程序中。

match "/my_sinatra_app" => MyApp, :anchor => false

有没有办法在对所有/my_sinatra_appurl 的 rails 进行过滤之前执行 Rails。?

4

1 回答 1

0

这是一个老问题,但我在 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
于 2014-04-04T04:29:04.207 回答