2016-11-14 60 views
0

我已经使用Podio API将近一年了,而且很少遇到问题,但是我最近遇到了一个我无法弄清楚的问题。我甚至不知道如何测试发生了什么。当一个项目被创建时,我有一个脚本的webhook,它将向一个项目发送一个http GET请求并执行许多功能。脚本运行得很好,从来没有遇到过任何问题,除非我快速连续创建一些项目(15左右)。如果我等待一分钟左右,就开始工作了多次调用后跑道认证失败

2016-11-14 16:41:14 401 GET /item/514610204 
2016-11-14 16:41:14 Reponse: {"error_parameters":{},"error_detail":null,"error_propagate":false,"request":{"url":"http:\/\/api.podio.com\/item\/514610204","query_string":"","method":"GET "},"error_description":"invalid_request","error":"unauthorized"} 

:如果我这样做,有一定的数量将成功完成,然后我会突然有新呼叫收到以下错误。

我使用用户名和密码进行身份验证。有谁知道发生了什么事情或者如何检查发生了什么? podio.log在这种情况下没有帮助。

(更新) 问题是我打了认证请求率限制,因为我没有使用会话管理器。我现在试图做到这一点,但有问题。使用Redis setup我的代码如下:

require_once 'models/PodioRedisSession.php'; 

Podio::set_debug(true, 'file'); 
Podio::setup($client_id, $client_secret,array(
    "session_manager" => "PodioRedisSession" 
)); 

Podio::$auth_type = array(
    "type" => "password", 
    "identifier" => "MY_EMAIL" 
); 
Podio::$oauth = self::$session_manager->get(Podio::$auth_type); //ERROR IS ON THIS LINE 

if (!Podio::is_authenticated()) { 

    Podio::authenticate_with_password('MY_EMAIL', 'MY_PASSWORD'); 
} 

使我有以下错误:无法访问自己::当无级范围是有效的。 我在正确的轨道上让会话管理员使用密码验证?该错误发生在注释行中。

(更新) 我终于能够让系统正常运行。上面的代码是正确的。服务器只需要重置(Windows服务器),以便Redis生效。

回答

1

为避免达到此限制,您应该使用API​​进行一次认证,然后存储从API返回的oauth和刷新令牌。 Redis将会做到这一点。然后,您使用oauth标记来处理所有后续请求。

一个例子可以在这里找到[1]

您的OAuth令牌的有效期为最多28天。当它不再有效时,您将需要使用您首次验证时收到的刷新令牌来获取新的oauth令牌。 [2]

[1] https://developers.podio.com/authentication/username_password

[2] https://developers.podio.com/authentication

+0

我很感谢你的帮助克里斯。我了解如何使用PHP在Podio中使用密码进行身份验证。我无法理解的是如何使用Redis存储Auth信息时使用密码进行身份验证。 [本页](http://podio.github.io/podio-php/sessions/)上提供的示例对我没有帮助,因为它使用的是应用程序而不是密码进行身份验证。 – Samson

+0

我用我的代码的验证部分更新了我的问题 – Samson

3

如果您的脚本正在对跑道进行身份验证,则每次创建项目时,您都有可能遇到Podio API对身份验证请求的速率限制。

每次当您的webhook触发脚本时,您是否生成新的验证令牌? The Podio client libraries包含一些关于会话管理的一般文档,可能有用!

+0

是我所有的脚本,每次重新进行身份验证。我从来没有考虑过这是多么低效。我现在已经设置Redis来跟踪文档,但我需要使用“authenticate_with_password”而不是authenticate_with_app。我能否获得一些帮助,以了解在提供的示例“PodioRedisSession”类中需要做出哪些更改以及需要在脚本的身份验证部分进行哪些更改才能使用密码进行身份验证? – Samson

+0

您使用Podio API客户端(哪一个)或您编写的所有自定义脚本?你在哪里看到“PodioRedisSession”示例? –

+0

我使用Podio提供的PHP客户端。这些脚本是自定义的,但它们使用该客户端库。 Redis示例在[此页]上(http://podio.github.io/podio-php/sessions/)。 – Samson