用rails连接到oauth2 / api时出现问题

时间:2016-04-08 14:11:53

标签: ruby-on-rails ruby oauth-2.0 mapmyfitness

我正在尝试通过oauth2连接到mapmyfitness api。但是,每当我尝试连接时,我都会收到错误。

这是配置文件..

OmniAuth.config.logger = Rails.logger

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :mapmyfitness, ENV['wn3ghaaqgbpnztsupsyfvswd3gtprvm9'], ENV['fRMsDbrNQJBgFUBkYReuqKffFKWTzZWVUKz9jCSTeVJ']
end

使用它应该允许我至少登录mapmyfitness,但每当我尝试连接(它重定向到https://www.mapmyfitness.com/v7.1/oauth2/authorize/confirm)...我在浏览器中收到此错误“未经授权的客户端试图访问您的资源“。

我不知道如何解决这个问题,感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

你有两个问题

  1. 如果您的数据存储在shell环境中,则只使用ENV [] - 更安全"这样做的方法是将信息存储在secret.yml
  2. 您的回调网址需要与Omniauth期望的内容相匹配 - 它应该是http://localhost.mapmyapi.com:12345/auth/mapmyfitness/callback,如下所述:https://github.com/intridea/omniauth#integrating-omniauth-into-your-application
  3. 使用机密的omniauth初始化程序示例

    Rails.application.config.middleware.use OmniAuth::Builder do
      provider :mapmyfitness, Rails.application.secrets.mapmyfitness_provider_key, Rails.application.secrets.mapmyfitness_provider_secret
    end
    

    然后你的secrets.yml看起来像:

    development:
      mapmyfitness_provider_key: wn3ghaaqgbpnztsupsyfvswd3gtprvm9
      mapmyfitness_provider_secret: fRMsDbrNQJBgFUBkYReuqKffFKWTzZWVUKz9jCSTeVJ
    

    显然,您将拥有不同的生产线。还要记住,既然您的密钥在世界各地,您可以考虑申请一组新的凭证:)

    同样重要的是要记住不要将你的config / secrets.yml文件检查到版本控制中 - 而是通过部署复制它。

    可以尝试使用lvh.me而不是mapmyfitness的localhost passthrough。

    将您在mapmyfitness注册的回调网址更改为

    http://lvh.me:3000/auth/mapmyfitness/callback
    

    然后在浏览器中访问http://lvh.me:3000

    显然,您需要确保使用与rails服务器运行相同端口的任何端口。