2011-01-30 18 views
19

誰もSinatraとDevise gemをインストールしましたか?SinatraとDevise

DeviseはWardenに基づいているため、Sinatraで動作するはずです。実装方法に関する関連情報は見つかりませんでした。

+0

かなりレール中心です:https://github.com/plataformatec/devise/blob/master/app/controllers/devise/confirmations_controller.rb – scragz

答えて

22

工夫は本当に基本的なラックの認証フレームワークであるwardenのための素敵なヘルパーとちょうどRailsの中心のラッパーであり、 。したがって、Railsと組み合わせてSinatraを使用している場合は、RailsアプリでDeviseを使用し、Sinatraアプリで監視員を直接使用すると、同じユーザーセッションデータが表示されます。

Sinatraアプリ内でDeviseを直接使用することはできませんが、RailsやSinatraの他の部分でモジュラーアプリを構築する場合は、Devise/Wardenをコンポーネントとして使用できます。

4

私はそれを働かせることができました。いくつかの主要な側面がありました:Railsので作業

  1. 考案取得(工夫がRailsのアプリで、それなしでは動作しません)
  2. セットアップはRailsとシナトラの両方をサポートするために、ラックレベルでのマッピング(ルート)
  3. セットアップウォーデンRailsとシナトラ間のセッションを共有し、シナトラ
  4. ここ

が利用できるよう/config.ruからのコードの最も関連する部分は次のとおりです。

# 

    # ... 

    # Rest with Rails 
    map "/" do 
     run MyApp::Application 
    end 

    # Anything urls starting with /slim will go to Sinatra 
    map "/slim" do 

     # make sure :key and :secret be in-sync with initializers/secret_store.rb initializers/secret_token.rb 
     use Rack::Session::Cookie, :key => '<< see, initializers/secret_store.rb >>', :secret => '<< copy from initializers/secret_token.rb >>' 

     # Point Warden to the Sinatra App 
     use Warden::Manager do |manager| 
     manager.failure_app = AppMain 
     manager.default_scope = Devise.default_scope 
     end 

     # Borrowed from https://gist.github.com/217362 
     Warden::Manager.before_failure do |env, opts| 
     env['REQUEST_METHOD'] = "POST" 
     end 

     run AppMain 
    end 

詳細については、http://labnote.beedesk.com/sinatra-warden-rails-deviseを参照してください。

+0

あなたはRailsであなたのアプリを開発したはずです – AMBasra

+0

@AMBasra、私はCRUD APIを開発するためのよりシンプルなフレームワークが必要でしたが、Sinatraはタスクに適したツールのように見えました。 –

+0

あなたのアプリでレールサーバーを走らせているということです。それはもはや軽いものではありません。すべてを1つにすることができれば、なぜ2つのフレームワークを使用するのですか?プロダクション環境では、レールとシナトラの両方が動作します。 – AMBasra