0

私は次のようなSinatraベースアプリを持っています:

class MyApp < Sinatra::Base
  get '/' do
    ..
  end
  get '/login' do
    ..
  end
end

そしていくつかのサブモジュールのような

class Protected < MyApp

  before '/*' do
    redirect('/login') unless logged_in
  end

  get '/list' do
    ...
  end
end

私のconfig.ruは以下のようなものです

map "/" do
  run MyApp
end

map "/protected" do
  run Protected
end

メイン アプリから/ loginではなく/protected/login/protected/listにリダイレクトしようとするため、アクセスしようとするとリダイレクト ループが発生します。正しいリダイレクトを強制するにはどうすればよいですか? 使えるのはわかってるけどダメみたい。redirect to('../login')

4

2 に答える 2

2

Sinatraを使用したimoでは、定数にURLを割り当てて、それらを参照することしかできません。

お気に入り:

MAIN_URL = '/'
PROTECTED_URL = '/protected'

class Protected < MyApp

before '/*' do
  redirect( MAIN_URL + 'login') unless logged_in
end

get '/list' do
  ...
end

map MAIN_URL do
  run MyApp
end

map PROTECTED_URL do
  run Protected
end

醜い。

代わりにエスプレッソを使用することをお勧めします。

ルーティングだけでなく、他のフレームワークがダメな別の側面でも非常に賢明です。

ルーティング部分はここにあります:http://e.github.com/Routing.html

于 2012-11-10T18:10:24.327 に答える
0

/config/application.rb にある私のアプリの 1 つから

class MyApp < Sinatra::Base

  configure do

    APP_ROOT = Pathname.new(File.expand_path('../../', __FILE__))
    # By default, Sinatra assumes that the root is the file that
    # calls the configure block.
    # Since this is not the case for us, we set it manually.
    set :root, APP_ROOT.to_path
    ...

ここでの最初の回答のように、config.ru でその定数を定義することもできます。

于 2015-09-12T17:19:07.407 に答える