0

我正在使用 Sinatra 和 Rack 在我的 Facebook Canvas 应用程序中使用会话。

Facebook Canvas 中发生的错误是:

NoMethodError - undefined method `session' for #<Hash:0xa3ed0a0>:
    /home/apoorv/.rvm/gems/ruby-1.9.2-p320/gems/sinatra-1.3.2/lib/sinatra/base.rb:170:in `session'

问题肯定出在 Rack 上,因为当我按如下方式运行我的应用程序时:

红宝石应用程序.rb -p 3000

它不显示任何错误。我尝试安装机架版本:1.3.6 和 1.4.1,但错误仍然存​​在。

我也尝试过使用以下代码而不是enable :sessions

use Rack::Session::Cookie, :key => 'rack.session',
                           :domain => 'static.ak.facebook.com',
                           :path => '/',
                           :secret => 'change_me'

我是否需要升级/降级到较低版本的 Rack 或添加一些代码来使这个东西工作?

已编辑

同样在遇到这个问题之前,我在将我的应用程序集成到 Facebook Canvas 中时遇到了问题,通过在 config.ru 中添加这一行来解决这个问题:

set :protection, :except => [:remote_token, :frame_options] 
4

1 回答 1

1

在从 Facebook 收到的 POST 请求中使用env['rack.session']而不是session[]解决了这个问题。希望这有助于解决此类问题

虽然它还没有完全解决并发症,因为现在redirect to在同一个 POST 回调中添加代码会显示:undefined method secure?错误。

我无法解决这个问题,尽管我所做的是避免重定向事情,而是向控制器添加一个功能来处理不同的请求。

于 2012-04-26T13:44:39.923 回答