繁体   English   中英

有什么办法可以从模块(不是控制器)重定向Rails中的ruby中的回调URL?

[英]is there any way to redirect callback url in ruby on rails from module (not controller)?

我正在使用Facebook graph API刷新用户访问令牌,因为Facebook每60天刷新一次访问令牌(如果令牌寿命很长),并且我已经在模块内编写了代码,因为我需要在令牌过期之前刷新令牌,因此我需要从后台工作程序或作业中运行此方法,如果我的代码从控制器运行,则在这种情况下没有问题,因为我能够通过使用redirect_to重定向Facebook身份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=所以现在该怎么办?

您可以将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所述模块到控制器中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM