我实施Koala for Rails时出现问题导致发送对话框出错,因为我的网站的网址被Facebook视为无效。
以下是发生的事情:
1)当我在发送对话框中包含诸如herokuapp-japanized-tree-URLs / restaurants / 2之类的URL时,Facebook API认为它无效。(API错误100)
2)我调试了URL,当它们远程访问时确实存在错误,因为Facebook的API用于验证链接的有效性。这仅在远程尝试期间发生,而不是在用户前往页面时发生。
3)我已经确定了代码中的弱点,它与Koala有关:
def set_access_token
begin
session['fb_cookie'] ||= Koala::Facebook::OAuth.new.get_user_info_from_cookie(cookies)
@access_token = session['fb_cookie']["access_token"]
rescue Koala::Facebook::OAuthTokenRequestError
session['fb_cookie'] = nil
set_access_token
end
问题是@access_token保持为零,无论之前是否存在。我认为这与在服务器上发出远程请求时未设置cookie有关 - 所以一切都为零。
这是在Heroku日志中声明错误的日志 - 它匹配我在这句话上方显示的代码中的点:
2013-04-06T07:59:25+00:00 app[web.1]: Processing by SessionController#home as */*
2013-04-06T07:59:25+00:00 app[web.1]:
2013-04-06T07:59:25+00:00 app[web.1]: NoMethodError (undefined method `[]' for nil:NilClass):
2013-04-06T07:59:25+00:00 app[web.1]: app/helpers/session_helper.rb:18:in `set_access_token'
2013-04-06T07:59:25+00:00 app[web.1]: app/helpers/session_helper.rb:58:in `parse_facebook_cookies'
2013-04-06T07:59:25+00:00 app[web.1]: app/helpers/session_helper.rb:63:in `authenticate'
2013-04-06T07:59:25+00:00 app[web.1]:
2013-04-06T07:59:25+00:00 app[web.1]:
2013-04-06T07:59:25+00:00 app[web.1]: Completed 500 Internal Server Error in 0ms
2013-04-06T07:59:25+00:00 heroku[router]: at=info method=GET path=/home host=powerful-woodland-3700.herokuapp.com fwd="173.252.101.112" dyno=web.1 connect=1ms service=15ms status=500 bytes=643
答案 0 :(得分:0)
这里的关键是,当FB远程ping我的URL时,它不会激活设置Koala所使用的cookie的Javascript SDK。
我本可以开发一种不同的身份验证方法,但是我的第一次尝试失败了,而是在我的控制器中设置了以下行:
rescue_from NoMethodError, :with => :redirect_to_signin
我认为这也会捕获随机错误,如过期或破坏的Cookie以及各种其他不可预见的事件,并将用户重定向到登录页面。
对上述任何想法都会非常受欢迎。