2011-01-30 3 views
19

누구나 Sinatra와 Devise 보석을 설치 했습니까?Devat with Sinatra

Devise는 Warden을 기반으로하므로 Sinatra에서 작동해야하며 구현 방법에 대한 관련 정보를 찾을 수 없습니다.

+0

레일 중심입니다. https://github.com/plataformatec/devise/blob/master/app/controllers/devise/confirmations_controller.rb – scragz

답변

22

고안 정말 기본 랙 인증 프레임 워크는 warden에 대한 좋은 도우미와 단지 레일 중심의 래퍼이며, . 따라서 Rails와 함께 Sinatra를 사용하는 경우 Rails 앱에서 Devise를 사용하고 Sinatra 앱에서 관리자 (warden)를 직접 사용하면 동일한 사용자 세션 데이터가 표시됩니다.

Sinatra 앱에서는 Devise를 직접 사용할 수 없지만 Sinatra의 일부 조각으로 구성된 모듈 식 앱을 구축하는 경우 구성 요소 중 Devise/Warden을 사용할 수 있습니다.

4

나는 그것을 얻을 수 있었다. 몇 가지 주요 측면이 있었다 :

  1. 고안은 랙 레벨 (고안이없이 레일 응용 프로그램이 작동하지 않습니다됩니다)
  2. 설정 매핑 (경로) 레일과 함께 작업하는 두 레일 및시나를 지원 받기
  3. 설정 소장 레일 및시나 사이의 세션을 공유시나
  4. 여기

에서 사용할 수 있도록 /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을 참조하십시오.

+0

레일에서 앱을 개발 했어야합니다. – AMBasra

+0

@AMBasra, CRUD API를 개발하는 데 더 간단한 프레임 워크가 필요했습니다. Sinatra는 작업에 적합한 크기의 도구처럼 보였습니다. –

+0

나는 당신이 당신의 앱으로 레일즈 서버를 돌리고 있다는 것을 의미했다. 더 이상 가볍지 않습니다. 모든 것을 하나의 작업으로 처리 할 수 ​​있다면 왜 두 개의 프레임 워크를 사용해야할까요? 프로덕션 환경은 레일과 sinatra를 모두 실행합니다. – AMBasra