存储重定向URL以便以后在rails 4中使用

时间:2016-05-17 11:57:13

标签: ruby-on-rails ruby redirect

我正在使用rails 4应用程序,我正在使用/使用其他网站的API,例如example.com,它使用3条腿的oauth授权(与twitter相同)。为了实现这个功能,我使用了这个link并实现了相同的功能。

这是我的实施

AuthController

class AuthController < ApplicationController
  before_filter :authenticate_user!
  before_filter :fetch_request_token, only: [:authorize]

  def authorize
    token = @consumer.get_request_token(oauth_callback: 'http://localhost:3000/auth/fetch_access_token')
    authorize_url = token.authorize_url
    redirect_to authorize_url
  end

  def fetch_access_token
    acc_token = request_token.get_access_token(oauth_verifier: params[:oauth_verifier])
    # remaining logic
    redirect_to files_jds_path
  end

  private

  def fetch_request_token
    #logic for fetching request token
  end
end

JDsController

class JDsController < AuthController
  before_filter :authorize, only: [:files, :field_info] unless: :check_access_token

  def files
    # logic for the files
  end

  def field_info
    # logic for the files
  end

  private

  def check_access_token
    # logic for checking access_token
  end
end

目前我在任何操作之前检查access_token是否存在,如果access_token不存在,那么我将使用authorize方法获取access_token。

如果您看到fetch_access_token中的AuthController方法(这是我的回调网址),那么我将重定向路径硬编码为files_jds_path

由于这个实现虽然before_filter应用于field_info,但在获取access_token后,它会重定向到files_jds_path

但我需要对其进行推广,以便对于任何操作,它将重定向到相应的路径。

任何人都可以建议我该怎么做

1 个答案:

答案 0 :(得分:1)

您可以将OAuth回调网址设置为在查询参数中包含路径。 Facebook和Twitter允许这样做。

class AuthController < ApplicationController
  before_filter :authenticate_user!
  before_filter :fetch_request_token, only: [:authorize]

  def authorize

    uri = URI('http://localhost:3000/auth/fetch_access_token')
    uri.query = { redirect_to: params[:referrer] }.to_query if params[:referrer]


    token = @consumer.get_request_token(oauth_callback: uri)
    authorize_url = token.authorize_url
    redirect_to authorize_url
  end

    def fetch_access_token
       acc_token = request_token.get_access_token(
         oauth_verifier: params[:oauth_verifier]
       )
       # remaining logic
       redirect_to params[:referrer] || files_jds_path
   end
end