我正在使用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
。
但我需要对其进行推广,以便对于任何操作,它将重定向到相应的路径。
任何人都可以建议我该怎么做
答案 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