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'

次のようにアプリケーションを実行すると、問題は間違いなくラックにあります。

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] 
4

1 に答える 1

1

Facebook から受信した POST リクエストでenv['rack.session']代わりに使用すると、この問題は解決しました。session[]このような問題の解決に役立つことを願っています

複雑さは完全には解決されていませんredirect toが、同じ POST コールバックにコードを追加するとundefined method secure?エラーが表示されるためです。

私はこの問題を解決できませんでしたが、リダイレクトを回避し、代わりにさまざまな要求を処理する機能をコントローラーに追加しました。

于 2012-04-26T13:44:39.923 に答える