与Sinatra一起设计

有没有人用Sinatra安装了Devise gem?

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

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

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

还有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 。