1

Railsアプリにマウントされたsinatraアプリケーションがあります。

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

/my_sinatra_appすべてのURLでレールをフィルター処理する前に Rails を実行する方法はありますか。?

4

1 に答える 1

0

これは古い質問ですが、Sidekiq Web で同様の問題に遭遇しました。

これを回避するには、ルート制約を使用できます。

ルート ファイルで、マウントされたアプリケーションへのルートを制限します。

require "sidekiq/web"
mount Sidekiq::Web, at: "/sidekiq", constraints: AdminConstraint.new

次に で、アプリケーションの認証に適用できる にAdminConstraintある呼び出しを行う必要があります。before_filterたとえば、 my に次のものがあったとします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 に答える