与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可用。
我能够让它运作起来。主要有几个方面:
- 让Devise使用Rails(Devise是一个Rails应用程序,没有它就行不通)
- 在Rack级别设置映射(路由)以支持Rails和Sinatra
- 分享Rails和Sinatra之间的会话
- 设置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与树莓上的工头一起运行在家庭网络中无法访问