我有兴趣学习rails的omniauth身份验证,所以我查看了不同的指南,其中也包含Railscast#360。
当我用developers.facebook.com创建自己的应用程序时,它会为我创建一个app_id和secret。我将应用程序设置为在线,并创建了一个基本的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是必需的"。
如何传递此错误,
您似乎误解了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。