7

我是 Rails 新手,正在努力将 OmniAuth-Facebook gem 整合到我现有的 rails 应用程序中。我遵循了 railscast 教程(http://railscasts.com/episodes/360-facebook-authentication),但是当我点击 /auth/facebook 时出现 NoSessionError 异常,它说我必须向 OmniAuth 提供会话。我会发布代码,但它与 railscast 教程中的完全一样。

它在 OmniAuth 的 strategy.rb 中的这条线上爆炸了: raise OmniAuth::NoSessionError.new("You must provide a session to use OmniAuth.") unless env['rack.session']

我需要明确启动会话吗?

4

1 回答 1

1

确保您正在设置环境变量。Railscast 教程要求将您的App ID/API KeyApp Secret键设置为环境变量,以便omniauth 初始化程序可以连接

provider :facebook, ENV['APP_ID'], ENV['APP_SECRET']

去做这个:

export APP_ID=(YOUR APP ID)
export APP_SECRET=(YOUR SECRET KEY)

执行此操作的另外两条途径是在您的 config/ 目录中创建一个 config.yml:

development:
  app_id:     'YOUR APP ID'
  app_secret: 'YOUR SECRET KEY'

将此添加到您的 config/application.rb

AppConfig = YAML.load(ERB.new(File.read(File.expand_path('../config.yml', __FILE__))).result)[Rails.env]
AppConfig.symbolize_keys!

然后在您的初始化程序中引用它们AppConfig[:app_secret] and AppConfig[:app_id]

最后一个选项是将值硬编码到提供程序中并删除ENV

provider :facebook, 'YOUR APP ID', 'YOUR SECRET KEY'

第二个选项是最可取的。

于 2013-02-13T20:49:26.687 回答