2012-02-02 119 views
1

我有兩個運行在不同端口的rails應用程序。第一個在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:我有current_user.present? # => false的情況下,我通過授權info行動(before_filter :login_or_oauth_required, :except => [:info]),否則我得重定向到登錄頁面。

回答

0

load_and_authorize_resource將拒絕訪問info操作。 只需添加: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)僅包含幾句關於測試OAuth提供者的信息:「選擇控制器操作目前需要登錄'@ response = @ access_token.get'/ accounts''「。但是在我的'/user_info.json'操作之前我已經重定向了。 – ck3g 2012-02-02 14:53:04

相關問題