Devise with Sinatra

前端 未结 4 1401
独厮守ぢ
独厮守ぢ 2021-02-05 07:54

Does anyone had installed Devise gem with Sinatra?

Devise is based on Warden and so it should work on Sinatra, I couldn\'t find any related info about how to implement i

4条回答
  •  南旧
    南旧 (楼主)
    2021-02-05 08:27

    I was able to get it working. There were a few main aspects:

    1. Get Devise working with Rails (Devise is a Rails app, won't work without it)
    2. Setup the mapping (route) on Rack level to support both Rails and Sinatra
    3. Share the sessions between Rails and Sinatra
    4. Setup Warden and make it available to Sinatra

    Here is most relevant part of code from /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
    

    See, http://labnote.beedesk.com/sinatra-warden-rails-devise for a complete solution.

提交回复
热议问题