【发布时间】:2014-08-18 07:44:50
【问题描述】:
我在我的应用程序中使用了 Devise 的 omniauth,但后来我将我的 Facebook 凭据移动到环境变量中,并且我已经在控制台中检查以确保它们已定义。我开始在我的服务器日志中看到这一点:
(facebook) Callback phase initiated.
facebook) Authentication failure! invalid_credentials: OAuth2::Error, :
{"error":{"message":"Error validating client secret.","type":"OAuthException","code":1}}
当我尝试让测试用户通过 Facebook 进行身份验证时。我检查了我的 APP_ID 和 APP_SECRET。两者都已设置并匹配我的 FB 开发人员仪表板中的凭据。
我还尝试删除我的 Facebook 应用并创建一个全新的应用(更新 ID 和 SECRET)。
我还尝试创建尚未使用omniauth 进行身份验证的新用户,但没有成功。
最后,我尝试恢复到硬编码的 Facebook 凭据。有效! 为什么我不能为这些凭据使用环境变量?我正在使用 Heroku,我仔细检查以确保它们已设置。我在本地环境中使用了初始化程序,并且在那里也正确设置了。
这是我在回调控制器中的实现:(注意,在用户注册帐户后,我使用 Facebook 作为可选集成。)
class Vendors::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
@vendor = current_vendor
uid = request.env["omniauth.auth"]["uid"]
fb_token = request.env["omniauth.auth"]["credentials"]["token"]
@vendor.update_attributes(:uid => uid, :fb_token => fb_token)
redirect_to vendors_dashboard_path
end
end
感谢您提供任何帮助。如果可能的话,我不希望对我的凭据进行硬编码并将它们签入源代码管理!
【问题讨论】:
-
你是如何在 Heroku 上设置这些 ENV 变量的?你用过this tutorial吗?
-
是的,使用了那个模式
heroku config:set FACEBOOK_APP_ID=123456789。 -
您提到您仔细检查了它们是否已设置。你能准确描述一下你做了什么来仔细检查吗?
-
在控制台中:
ENV['FACEBOOK_APP_ID']# => 123456789.. -
也用过
heroku config:get FACEBOOK_APP_ID
标签: ruby-on-rails facebook devise omniauth