Подтвердить что ты не робот

Придумайте с Синатрой

Кто-нибудь установил Devise драгоценный камень с помощью Sinatra?

Разработчик основан на Warden, поэтому он должен работать на Sinatra, я не мог найти никакой информации о том, как его реализовать.

4b9b3361

Ответ 1

На самом деле Devise - это просто Rails-ориентированная оболочка с приятными помощниками для warden, которая является основой для проверки подлинности Rack. Поэтому, если вы используете Sinatra совместно с Rails, вы можете использовать Devise в своем приложении Rails и использовать warden непосредственно в вашем приложении Sinatra, и они будут видеть те же данные сеанса пользователя.

Нет, вы не можете использовать Devise прямо в вашем приложении Sinatra, но если вы создаете модульное приложение с некоторыми частями в Rails и другими частями в Sinatra, вы можете использовать Devise/Warden среди компонентов.

Ответ 4

Я смог заставить его работать. Было несколько основных аспектов:

  • Get Devise работает с Rails (Devise - это приложение Rails, не будет работать без него)
  • Настройте отображение (маршрут) на уровне Rack для поддержки Rails и Sinatra
  • Поделитесь сеансами между Rails и Sinatra
  • Уточнить Уорден и сделать его доступным для Sinatra

Вот наиболее важная часть кода из /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 для полного решения.