1

我正在尝试通过 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)...我得到这个错误在浏览器中“未经授权的客户端试图访问您的资源”。

我不知道如何解决这个问题,任何帮助表示赞赏!

4

1 回答 1

2

你遇到的两个问题

  1. 仅当您的数据存储在 shell 环境中时才使用 ENV[] - 执行此操作的“更安全”的方法是将信息存储在 secret.yml
  2. 您的回调 URL 需要与 Omniauth 的预期相匹配——它应该是http://localhost.mapmyapi.com:12345/auth/mapmyfitness/callback,如下所述:https ://github.com/intridea/omniauth#integrating- omn​​iauth 进入您的应用程序

使用机密的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 注册的回调 URL 更改为

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

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

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

于 2016-04-08T15:08:15.670 回答