Rails - Omniauth-facebook App_id需要输入错误

时间:2015-01-24 14:52:02

标签: ruby-on-rails authentication omniauth facebook-authentication omniauth-facebook

我有兴趣学习使用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时,我收到一条错误消息,指出&#34;参数app_id是必需的&#34;。

我如何传递此错误,

1 个答案:

答案 0 :(得分: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。使应用程序正常工作的最简单方法是将它们作为String。

provider :facebook, "875829959136178", "APP_SECRET"

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