我正在尝试拆分我当前的Ruby on Rails 3 web应用程序和它的web服务(API)。我的web应用程序在Heroku上运行,并在应用程序中将API实现为命名空间路由。例如,/events返回一个HTML页面,而/api/v1/events返回一个JSON数据。
根据一些best practices,我想把它们分成两个不同的应用程序。我选择Sinatra来实现API应用程序。它现在适用于不需要身份验证的简单请求。
我的Ruby on Rails 3应用程序使用Devise对用户进行身份验证。也有能力登录与Facebook帐户。现在,我想要实现的是使用Warden通过基于Sinatra的API对用户进行HTTP基本身份验证(包括注册)。
做到这一点的最好方法是什么?或者我可以用一些不同的东西而不是典狱长?
请记住,我不太熟悉Rack :)
发布于 2011-11-02 11:47:11
我能让它工作起来。主要有几个方面:
以下是/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。
https://stackoverflow.com/questions/5700936
复制相似问题