2016-11-14 9 views
0

私はPodio APIを使って1年近く働いていて、問題はほとんどありませんでしたが、最近私は理解できないものに遭遇しました。私は何が起こっているのかをテストする方法さえもわかりません。アイテムが作成されると、アイテムにhttp GETリクエストを送信し、いくつかの機能を実行するスクリプトへのWebhookがあります。私はすぐに連続していくつかのアイテムを作成しない限り、スクリプトはうまく動作し、問題に遭遇したことはありません。私はこれを行う場合は、特定の番号が正常に終了し、その後、私は突然、それぞれの新しい呼び出しで次のエラーが発生します。私は数分待つか、もしそうなら複数の呼び出しの後でPodio認証が失敗する

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はこのような状況では役に立ちませんでした。

(更新) 問題は、セッションマネージャーを使用していないため、認証要求のレート制限にぶつかっていることです。私は今これをしようとしているが、問題がある。私は次のエラーを与える

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'); 
} 

を自己にアクセスすることはできません::何のクラスのスコープがアクティブでないとき、次のようにRedis setupを使用して私のコードです。 セッション管理者にパスワード認証を働かせてもらえますか?コメント行にエラーが発生します。

(更新) 私はようやくシステムを正しく動作させることができました。上記のコードは正しいです。 Redisを有効にするには、サーバーをリセットするだけで済みました(Windowsサーバー)。

答えて

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のパスワードで認証する方法を理解しています。私が理解できないことは、Auth情報を格納するためにRedisを使用するときにパスワードを使用して認証する方法です。 [このページ](http://podio.github.io/podio-php/sessions/)で提供されている例は、パスワードではなくアプリで認証されているため、助けになりません。 – Samson

+0

自分のコードの認証セクションで質問を更新しました – Samson

3

アイテムが作成されるたびにスクリプトがPodioに認証されている場合、認証リクエストでPodio APIのレート制限を実行している可能性があります。

スクリプトがウェブフックによってトリガーされるたびに新しい認証トークンを生成していますか? The Podio client librariesには、役に立つセッション管理に関する一般的な文書がいくつか含まれています。

+0

はい、私のスクリプトは、すべてのたびに再認証します。私はそれがどれほど非効率的であるかは決して考えなかった。ドキュメンテーションに従うためにRedisをセットアップしましたが、authenticate_with_appではなく "authenticate_with_password"を使用する必要があります。私は、提供された "PodioRedisSession"クラスの変更や、パスワードで認証するためにスクリプトの認証セクションでどのような変更が必要なのかを理解する助けを得ることができますか? – Samson

+0

あなたが書いたPodio APIクライアント(1つ)またはカスタムスクリプトを使用していますか?「PodioRedisSession」の例はどこにありますか? –

+0

私はPodioが提供するPHPクライアントを使用しています。スクリプトはカスタムですが、そのクライアントライブラリを使用します。 Redisの例は[このページ](http://podio.github.io/podio-php/sessions/)にあります。 – Samson

関連する問題