我正在使用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]
答案 0 :(得分:1)
在Facebook收到的POST请求中使用env['rack.session']
代替session[]
解决了此问题。希望这有助于解决这些问题
虽然未完全解决了并发症,因为现在在同一个POST回调中添加redirect to
代码会显示:undefined method secure?
错误。
我无法解决这个问题,虽然我所做的是避免重定向,而是向控制器添加一个功能来处理不同的请求。