【问题标题】:is there any way to redirect callback url in ruby on rails from module (not controller)?有没有办法从模块(而不是控制器)重定向 ruby​​ on rails 中的回调 url?
【发布时间】:2017-08-27 11:05:06
【问题描述】:

我正在使用 facebook graph API 来刷新用户访问令牌,因为 Facebook 每 60 天刷新一次访问令牌(如果令牌是长期存在的),并且我已经在模块中编写了代码,因为我需要在它之前刷新令牌过期了,我需要从后台工作人员或作业运行此方法,如果我的代码从控制器运行,那么在这种情况下,没问题,因为我可以使用 redirect_to 重定向 Facebook auth URL(回调 URL)但是当我从 Worker 或模块运行它会引发 redirect_to 方法的错误,因为 redirect_to 方法对模块不可用(如果我尝试使用来自 Httparty 或 Net 模块的 get 和 post 请求,那么它会将请求发送到 facebook auth url 但请求不是回到我的控制器,但如果我从浏览器点击 url,那么请求就会返回到我的combtroller ) 下面是我的模块代码:-

@oauth = Koala::Facebook::OAuth.new(Figaro.env.fb_app_id,Figaro.env.fb_secret_token,Figaro.env.fb_callback_url)

oauth_code_url = @oauth.url_for_oauth_code

redirect_to oauth_code_url

此代码适用于控制器但不适用于模块?我知道 MVC 架构和请求/响应是通过控制器完成的,但我需要重定向 Facebook OAuth URL,以便我可以从 Facebook 获取代码,然后刷新令牌。我也尝试过 HttpClient 但它也没有工作redirect_uri_callback=(redirect_uri_callback) ⇒ Object http://www.rubydoc.info/gems/httpclient/HTTPClient:redirect_uri_callback= 所以现在我该怎么办?

【问题讨论】:

  • 您需要用户再次访问您的应用以首先创建一个新的短期用户令牌。

标签: ruby-on-rails ruby facebook facebook-graph-api redirect


【解决方案1】:

您可以将self 的值从控制器操作传递给模块(注意,为了简单起见,我将其更改为类方法)

module FacebookStuff
  def self.handle_oauth_request(request)
    @oauth = Koala::Facebook::OAuth.new(
      Figaro.env.fb_app_id,Figaro.env.fb_secret_token,Figaro.env.fb_callback_url
    )
    oauth_code_url = @oauth.url_for_oauth_code
    request.redirect_to oauth_code_url
  end
end

# in controller action
FacebookStuff.handle_oauth_request(self)

或者您可以保持模块方法的原样,只需将最后一行移动到控制器。让模块方法返回 oauth_code_url,然后在控制器操作中使用它来重定向。两者都应该起作用,并且取决于您使用哪种方式。第三种选择是将方法从模块移动到 ApplicationController,其方法可用于所有控制器。第四种选择是将include 模块放入控制器中。

【讨论】:

  • 我可以从工作人员或后台作业中调用此方法吗?
  • 这取决于您是否将请求处理逻辑保留在内部。换句话说,如果您在模块外部调用 redirect_to(因此它不需要在请求/响应生命周期内),那么您可以假定在任何情况下使用该模块。
  • 实际上我是从一个工人那里打电话给这个的,它给出的错误是undefined method redirect_to' `
  • 这正是我想要表达的观点。如果你让它依赖于一个请求对象,它将无法从除控制器之外的任何地方调用。这就是为什么您应该将 redirect_to 提取到调用者范围的原因。无论如何,工人调用 redirect_to 真的没有意义,不是吗?
  • 我明白了你关于请求对象的观点,但你的最后一行我没有得到你应该将 redirect_to 提取到调用者范围?这里来电者是一名工人,这就是为什么我有点困惑?很抱歉造成误解。
猜你喜欢
  • 2016-09-26
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
  • 2012-01-31
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多