使用Sinatra for Facebook Canvas Application的未定义方法'session'

时间:2012-04-26 13:25:31

标签: session sinatra rack

我正在使用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,因为当我运行我的应用程序时如下:

  

ruby​​ application.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] 

1 个答案:

答案 0 :(得分:1)

在Facebook收到的POST请求中使用env['rack.session']代替session[]解决了此问题。希望这有助于解决这些问题

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

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