2012-02-02 4 views
1

다른 포트에서 실행되는 두 개의 레일 응용 프로그램이 있습니다. 첫 번째는 3000, 두 번째는 4000입니다. 둘 다 정식으로 Devise gem을 사용합니다. 첫 번째 응용 프로그램은 OAuth 공급자 역할을하고 두 번째 응용 프로그램은 OAuth 소비자 역할을 담당합니다. 내 환경을 구축하기 위해 thisthat 자습서를 따라 왔습니다.OAuth를 사용하는 응용 프로그램 간의 인증

거의 모든 것이 정상적으로 작동합니다. 나는 소비자 애플리케이션을위한 핵심 및 비밀을 성공적으로 생성했습니다. 그리고 공급자 신청서에 성공적으로 승인합니다.

내 클라이언트 응용 프로그램에서 두 가지 방법이 있습니다 : 공급자 응용 프로그램에서

def auth 
     @consumer = OAuth::Consumer.new 'KEY', 'SECRET', :site => "http://localhost:3000" 
     @request_token = @consumer.get_request_token 
     session[:request_token] = @request_token 
     redirect_to @request_token.authorize_url 
    end 

    def auth_callback 
     @request_token ||= session[:request_token] 
     @access_token = @request_token.get_access_token :oauth_verifier => params[:oauth_verifier] 
     @request = @access_token.get '/user_info.json' 
     render :text => @request.body.inspect 
    end 

그리고 API 방법 : @request = @access_token.get '/user_info.json' 내가 전화 할 때 : 나는 줄에서 사용자 정보를 얻는 때

class UsersController < InheritedResources::Base 
     before_filter :login_or_oauth_required 
     load_and_authorize_resource 

     def info 
     logger.info current_user.present? # => false 
     @info = { } # here I've collect user info for current_user 
     respond_to do |format| 
      format.json { render :json => @info } 
     end 
     end 
    end 

젠장 일이 이미 소비자 응용 프로그램 사용자가 공급자 응용 프로그램에서 권한이 없습니다.

제공자의 자원으로 승인을받을 수 있습니까?

UPD : 내가 그렇지 않으면 내가 로그인 페이지로 리디렉션있어 한 info 행동 (before_filter :login_or_oauth_required, :except => [:info])에 대한 인증을 통과 할 경우 current_user.present? # => false을 가지고있다.

답변

0

load_and_authorize_resourceinfo 동작에 대한 액세스를 거부합니다. 그냥 :except 속성을 추가하십시오.

load_and_authorize_resource :except => [:info] 
1

귀하는 제공자의 승인을 유지하지 마십시오.

API에 대한 모든 요청에 ​​대해 액세스 토큰 (매개 변수 또는 헤더에 있음)이 표시되며이 토큰에서 누가 current_user인지 확인할 수 있습니다. 요청간에 세션이 없습니다.

This gem은 OAuth 제공 업체가 필요한 경우 도움이 될 수 있습니다.

+0

질문 텍스트를 업데이트했습니다. [이 기사] (http://kentonwhite.wordpress.com/2010/07/29/creating-an-oauth-provider-with-oauth-plugin)에는 ho에 대해 OAuth 공급자를 테스트하는 몇 가지 단어가 들어 있습니다. "컨트롤러 동작 선택 현재'@ response = @ access_token.get '/ accounts''라고 로그인해야합니다. 하지만 '/user_info.json'작업 전에 리디렉션되었습니다. – ck3g

관련 문제