与Sinatra一起设计

问题描述 投票:19回答:4

有没有人在Sinatra安装了Devise宝石?

Devise基于Warden,因此它应该适用于Sinatra,我找不到任何有关如何实现它的相关信息。

ruby sinatra devise
4个回答
22
投票

Devise实际上只是一个以Rails为中心的包装器,为warden提供了很好的帮助器,这是底层的Rack身份验证框架。因此,如果您将Sinatra与Rails结合使用,您可以在Rails应用程序中使用Devise,并在Sinatra应用程序中直接使用warden,他们将看到相同的用户会话数据。

所以不,你不能直接在你的Sinatra应用程序中使用Devise,但是如果你正在使用Rails中的一些部分和Sinatra中的其他部分构建模块化应用程序,则可以在组件中使用Devise / Warden。




4
投票

我能够让它运作起来。主要有几个方面:

  1. 让Devise使用Rails(Devise是一个Rails应用程序,没有它就行不通)
  2. 在Rack级别设置映射(路由)以支持Rails和Sinatra
  3. 分享Rails和Sinatra之间的会话
  4. 设置Warden并将其提供给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获取完整的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.