У меня загадка с аутентификацией Podio PHP API. Я не могу что-то сделать без следующей фатальной ошибки. Я делаю это: Podio::authenticate_with_password('aaa', 'bbb');
и я получаю это: PHP Fatal error: Uncaught PodioRateLimitError: "You have hit the rate limit. Please wait 300 seconds before trying again"
Моя система работает со сложными отношениями, разделенными на множество пространств, поэтому я создал «главную» учетную запись, которая выполняет роль администратора в каждой целевой области.
Каждый раз, когда вызывается веб-перехватчик, я проверяю подлинность с помощью «главной» учетной записи (было бы много работы для проверки подлинности с помощью приложения из-за нескольких взаимосвязей в одном и том же сценарии).
Один и тот же веб-перехватчик вызывается несколько раз, но в разном контексте.
Как я могу избежать превышения лимита скорости каждый раз, когда вызывается мой веб-перехватчик? Пробовал OAuth 2, но документация Podio бесполезна в моем случае. У меня ни одна попытка не сработала.
Есть ли у вас способ сохранить данные аутентификации в памяти / базе данных, чтобы иметь возможность использовать их для каждой аутентификации password
из нескольких вызовов веб-перехватчиков?
Любая помощь будет очень признательна!
Я нашел кое-что интересное, покопавшись в классе Podio PHP API:
Вот что я сделал:
// Set user API key
Podio::setup('user-key', 'wejt9wetwerith34rtfhwetu34hwerud);
// Init refresh_token variable (avoid PHP warning if any refresh_token found in database)
$refresh_token = null;
// Get refresh_token from database if exists
$refresh_token = REFRESH_TOKEN_FROM_DATABASE;
// Authenticate
try{
// Authenticate with refresh token stored in database
Podio::authenticate( 'refresh_token', array( 'refresh_token' => $refresh_token ) );
}
// Authentication failed, request new refresh_token
catch ( Exception $ex ) {
Podio::authenticate_with_password( 'aaa', 'bbb' );
// Get Oauth data including refresh token
$oauth = Podio::$oauth;
// Authenticate with refresh token
Podio::authenticate( 'refresh_token', array( 'refresh_token' => $oauth->refresh_token ) );
// Store $oauth->refresh_token in database for next webhook call...
}
Очень важный использует тот же ключ API пользователя в вашем скрипте, чтобы избежать нарушения ограничения скорости аутентификации, потому что refresh_token
связан с ключом API пользователя, используемым для выполнения запроса.
Документация Podio:
Он написал, что документация не помогла. Я считаю, что фрагмент или логический контекст были бы лучшим ответом.
@VincentPoirier прав. Я хотел бы получить фрагмент, чтобы увидеть то, что я не понял из документации Podio. Является ли приведенный выше код реальным способом избежать ограничения скорости аутентификации? Будем очень признательны за любые дальнейшие объяснения.
Do you have any way to keep in memory/database authentication data to be able to use it for each password authentication from multiple webhook call?
- Да, это называется управление сеансом, и все подробности о том, как его реализовать, находятся здесь podio.github.io/podio-php/sessionsОтвет описан в разделе РЕШЕНИЕ исходного сообщения выше.
Ваше решение будет работать, но все еще не идеально. Нет необходимости каждый раз звонить в Podio::authenticate( 'refresh_token'
. Вы должны сохранить и access_token
, и refresh_token
и использовать их для создания объекта PodioOAuth
. Затем, если у вас много вызовов, будет 0 запросов на аутентификацию, и только время от времени refresh_token
будет использоваться для получения нового access_token
.
Можете ли вы привести пример использования PodioOAuth
в моем случае?
@hassanmaleki - как ваш вопрос (тот, на который вы ссылались) связан с этим вопросом? Комментарии должны быть для уточнения вопроса, а не для продвижения другого вопроса.