我有兴趣学习使用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;。
我如何传递此错误,
答案 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这样的宝石。