2012-02-02 123 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

相关问题