4

私はsinatra-authentication gemをSinatraアプリに追加しようとしていますが、そこにいてその一部を実行している間、何らかの理由でルートが追加されていないようです. コードの基本:

require 'sinatra'
require 'digest/sha1'
require 'rack-flash'
require 'mongo_mapper'
require 'sinatra-authentication'

MongoMapper.connection = Mongo::Connection.new('127.0.0.1', 27017, :pool_size => 5, :pool_timeout => 5)
MongoMapper.database = 'cms'

module CmsMod
  class CmsApp < Sinatra::Base
    use Rack::Session::Cookie, :secret => 'something secret'
    use Rack::Flash

    get '/' do
      #redirect to('/list') # commented out for testing
    end

    get '/private' do
      login_required
      'Protected Page'
    end

そして、残りのこと。症状は、ブラウザーを通常のルートに向けると正常に機能することです。「/private」に移動すると、「/login」に正しくリダイレ​​クトされますが、古い「Sinatra doesn't know this ditty」というメッセージが表示されます。「/login」に直接アクセスしようとしても同じです。「binding.pry」を使用してgetブロック内のものを調べてみましたが、ルートがそこにないことがわかりました。これを引き起こす原因についてのアイデアは本当にありがたいです。

4

2 に答える 2

3

ライブラリのソースを見て、それは拡張機能として書かれていますが、例とドキュメントには拡張機能の登録方法が記載されていません。これを試して:

module CmsMod
  class CmsApp < Sinatra::Base
    register Sinatra::SinatraAuthentication  # <= this is the missing magic line.

次に、ルートが表示されます。余談ですが、encrypted_cookiegemを使用することもお勧めします。

use Rack::Session::Cookie, :secret => 'something secret'

になります:

use Rack::Session::EncryptedCookie, :secret => 'something secret'
于 2012-09-19T02:03:59.283 に答える
3

「haml」gemも必要なようです。そのため、hamlを使用していない場合(私がslimを使用しているように)、プロジェクトにhamlを含めて動作させる必要があります。

また、ビューにレイアウトを設定することを忘れないでください。デフォルトでは、views/layout.haml が検索されるためです。

于 2012-12-03T18:28:42.650 に答える