5

我有兴趣学习使用 rails 的omniauth 身份验证,因此我检查了不同的指南,其中还包含 Railscast #360。

当我使用developers.facebook.com 创建自己的应用程序时,它会为我创建一个App_id 和秘密。我将应用程序设置为在线并创建了一个基本的 Rails 应用程序,它只使用了 Ryan Bates 指南中的步骤。

这是我的 omniauth.rb 文件,它会生成我收到的错误,

 OmniAuth.config.logger = Rails.logger

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, ENV['875829959136178'], ENV['<app_secret>']
end

我试过用

provider :facebook, ENV['FACEBOOK_875829959136178'], ENV['FACEBOOK_<app_secret>']

还。

当我调用http://localhost:3000/auth/facebook时,我收到一条错误消息,指出“需要参数 app_id”。

我怎么能通过这个错误,

4

1 回答 1

11

您似乎误解了 ENV 是什么。ENV[xxx]是一种检索环境变量值的 ruby​​ 方法xxx。因此 ENV['875829959136178'],在您的代码片段中尝试检索环境变量的值875829959136178。您很可能没有将 app_id 设置为环境变量875829959136178,因此ENV['875829959136178']返回 nil。provider是一种采用 app_id 和 app_secret 的方法,但是由于您将 nil 作为 app_id 给出,因此它声称 app_id 没有给出,即使它是必需的。

假设您的 app_id 是875829959136178,而您的 app_secret 是APP_SECRET。使您的应用程序工作的最简单方法是将它们作为字符串提供。

provider :facebook, "875829959136178", "APP_SECRET"

但是,您应该注意,从安全角度来看,将您的应用程序 ID 和机密作为纯文本放在源代码中是不可取的。你应该通过阅读这样的文章来学习如何设置环境变量,或者使用像dotenv这样的 gem 。

于 2015-01-24T16:39:50.203 回答