我在我的应用程序中使用了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
此处的任何帮助表示赞赏。如果可能的话,我不想硬编码我的凭据并将它们检查到源代码管理中!
答案 0 :(得分:0)
您正在尝试获取与环境变量不同的请求变量。您可以通过ENV哈希访问您的环境变量。通过将它们输出到控制台puts ENV['KEY']
来确保它们存在。