首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sinatra Warden和使用Devise的现有Ruby on Rails应用程序

Sinatra Warden和使用Devise的现有Ruby on Rails应用程序
EN

Stack Overflow用户
提问于 2011-04-18 17:32:18
回答 1查看 5.5K关注 0票数 5

我正在尝试拆分我当前的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 :)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-02 11:47:11

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

  • Get Devise使用Rails (Devise是Rails应用程序,没有它将无法工作)
  • 在机架级设置映射(路由)以同时支持Rails和Sinatra
  • 共享Rails和Sinatra
  • 设置管理器之间的会话,并使其可用于Sinatra

以下是/config.ru中最相关的代码部分:

代码语言:javascript
复制
    #

    # ...

    # 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

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5700936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档