与Sinatra一起设计

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了与Sinatra一起设计相关的知识,希望对你有一定的参考价值。

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

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

答案

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

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

另一答案

Devise仅适用于Rails。你不能和Sinatra一起使用它。

你可以看看:

https://github.com/maxjustus/sinatra-authentication

http://www.gittr.com/index.php/archive/sinatra-basic-authentication-selectively-applied/

https://gist.github.com/243611

另一答案

还有https://github.com/jsmestad/sinatra_warden可用。

另一答案

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

  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获取完整的解决方案。

以上是关于与Sinatra一起设计的主要内容,如果未能解决你的问题,请参考以下文章

Sinatra APP与树莓上的工头一起运行在家庭网络中无法访问

使用 Sinatra 提供静态文件

在Sinatra中使用Rack :: CommonLogger

HTTP更改变量并重新加载Sinatra

片段内的片段不能与 ScrollView 一起使用

Sinatra 与 Rails