【问题标题】:Rails Facebook-omniauth, Devise - Why can't I use environment variables?Rails Facebook-omniauth,Devise - 为什么我不能使用环境变量?
【发布时间】: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']# =&gt; 123456789..
  • 也用过heroku config:get FACEBOOK_APP_ID

标签: ruby-on-rails facebook devise omniauth


【解决方案1】:

您正在尝试获取与环境变量不同的请求变量。您可以通过 ENV 哈希访问您的环境变量。通过将它们输出到控制台puts ENV['KEY'] 来确保它们存在。

【讨论】:

  • 实际上这些请求变量来自通过 Facebook 的omniuath 回调。在设计初始化程序中访问我的环境变量。正如我在问题中所说,我已经检查并重新检查以确保设置了 ENV 变量。
  • 再次检查您的环境变量。 facebook 返回的错误信息非常清楚:“Error validating client secret.”
  • 我在开发和生产中多次检查过它。我多次重新设置APP_SECRET,但没有结果。
猜你喜欢
  • 1970-01-01
  • 2021-04-20
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 2015-04-11
  • 2011-09-06
  • 1970-01-01
  • 2022-11-30
相关资源
最近更新 更多