![](/img/trans.png)
[英]is there any way to redirect (like redirect_to) the url from worker, modules in rails?
[英]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.