【问题标题】:Yelp Place API returning "Invalid Signature" Error only from Nginx on EC2Yelp Place API 仅从 EC2 上的 Nginx 返回“无效签名”错误
【发布时间】:2015-05-27 07:27:02
【问题描述】:

问题:我从 Yelp API 收到“无效签名”错误仅来自生产(在 AWS 的 nginx 服务器上运行)当我在本地主机上本地运行时: 3000,没有签名错误,一切正常。

我在 Rails 中使用 yelp gem。这是 ruby​​ 中的一些代码。:

$client = Yelp::Client.new({
    consumer_key: $SL_CONSUMER_KEY,
    consumer_secret: $SL_CONSUMER_SECRET,
    token: $SL_TOKEN,
    token_secret: $SL_TOKEN_SECRET
})

begin
    $client.search("Los Angeles")
rescue => error
    puts error.message
    puts error.inspect
end

error.message 打印出来:“签名无效”

error.inspect 打印出:

当我在 Rails 的 Webrick 服务器上本地运行时,一切正常,但是当我在生产环境中运行时,我收到“无效签名”错误。

有人看过吗?我看过一些相关的帖子,但这似乎有所不同。谢谢!

【问题讨论】:

  • 请分享您的错误信息(无效签名)。
  • @JarachanthanRatnakumar 我用一些打印声明和我得到的内容编辑了上面的帖子。

标签: ruby-on-rails nginx oauth amazon-ec2 yelp


【解决方案1】:

这可能与大多数人无关,但它可能对某人有所帮助,这里是:

我的“时间”被我的 EC2 实例占用了。例如,在 ruby​​ 中,Time.now 没有打印实际时间。 (我认为它已经关闭了几分钟左右)。

无论如何,Yelp API 在您发送请求时需要 oauth_timestamp。当然,然后,我的请求是超时 b/c 时间已关闭。

我是如何发现这个错误的?

我只是用 oauth、token、oauth_timestamp 等(更多)作为查询参数在浏览器上 ping 了 URL。浏览器以 JSON 格式吐出错误响应,表示我的请求超时。当您使用 ruby​​ Yelp Client 并在代码中捕获异常时,它不会在终端中吐出错误响应,因此定位错误的确切根源有点困难。

我是如何解决的:

我按照此处的说明重新校准了我的 ec2 实例中的时间:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html

问题解决了。和平。

【讨论】:

  • 我今天遇到了同样的问题,但我使用的是 yelp Python API。不知何故偶然发现了你的问题。然后,我明白了真正的原因。改变了时间,它就像一个魅力!非常感谢!但我在这里使用了时间更改:stackoverflow.com/a/11931955/815539
【解决方案2】:

Yelp API 中出现Invalid signature 错误的原因有两个。 首先,您的四个键中的任何一个,即consumer_keyconsumer_secret_keyTokenToken Secret 都是无效的。其次 Parameters 传递给 Yelp API 函数要么无效,要么其中任何一个为 nil。

【讨论】:

    猜你喜欢
    • 2016-10-02
    • 1970-01-01
    • 2016-06-07
    • 2022-07-20
    • 2012-09-17
    • 2020-01-21
    • 2015-07-12
    • 2015-05-23
    • 2020-09-06
    相关资源
    最近更新 更多