API Twitter - причины появления "недействительного или просроченного токена"
Каковы возможные причины истечения срока действия токена (помимо того, что пользователь не авторизует приложение)?
Моя проблема в том, что у меня есть приложение с несколькими тысячами пользователей, все взаимодействие с API работает отлично, но для некоторых пользователей я получаю invalid or expired token
ошибка, но я изначально был тем, что это пользователи, которые отменили аутентификацию приложения, но я связался с некоторыми из них, и они не отозвали доступ.
Есть идеи, какие другие проблемы могут вызвать эту ошибку?
11 ответов
Проверьте целостность токена доступа в любое время, вызвав учетную запись GET / verify_credentials при использовании этого токена доступа.
Это упомянуто, и исследованием я узнал, что:
Ваш токен доступа будет недействительным, если пользователь явно отклонит ваше приложение из своих настроек или если администратор Twitter приостановит ваше приложение. Если ваша заявка приостановлена, на странице заявки появится примечание о том, что она была приостановлена.
Почему мой токен доступа к oauth недействителен / истек?
Проверьте это сообщение: недействительные / просроченные токены доступа.
В группах Google есть один пост, в котором говорится:
У вас нет второго шанса, и это сделано специально. Запросы OAuth имеют уникальную подпись; после того, как конкретный запрос отправлен, он не может быть отправлен снова. Если они вводят пин-код правильно, все хорошо, вы получаете токен доступа. Если они введут неправильный пин-код, вы получите 401 Unauthorized - что ожидается. Но если они затем попытаются снова ввести штифт, даже правильный штифт будет показан как несанкционированный.
Проверьте эту ссылку для вышеупомянутой ссылки.
Некоторые предложения сотрудника твиттера по той же проблеме:
Я полагаю, что на данный момент я бы предложил две вещи: 1.) Перейдите в настройки вашего приложения и используйте вкладку "Сбросить ключи", чтобы сбросить ваш ключ и секретный ключ пользователя, затем обновите эти значения в приложении и убедитесь, что вы все еще видите такое же поведение. 2.) Попробуйте передать oauth_callback в ваш запрос request_token. Честно говоря, я не думаю, что это будет иметь значение, но я хочу постараться быть настолько строгим, насколько смогу здесь.
Также проверьте это обсуждение, говоря:
Вам нужно использовать oauth_token и oauth_token_secret, возвращенные из вызова oauth / access_token, вместо того, который указан в настройках вашего приложения на dev.twitter.com
Я получаю ту же ошибку, то я изменил (access_token) to (access_token_key)
и это сработало для меня.
Надеюсь, это кому-нибудь поможет.
В дополнение к комментариям, сделанным всеми остальными, иногда твиттер-API возвращает ошибку "неверный токен", когда токен не является проблемой. Я заметил это больше всего, когда построил строку запроса, которая не анализируется правильно. Например, однажды я получил эту ошибку, когда передавал screen_name с символами, которые не были кодируемыми URI. Я также получил это, когда я передал пустые значения, как это (где курсор пуст):
https://api.twitter.com/1/followers.json?cursor=&screen_name=whatevah
Не могли бы вы дать нам специфику звонков, которые возвращают эту ошибку?
Прежде всего, хороший вопрос Ран.
Я хочу спросить вас, что вы прошли через разработчиков Твиттера??
Иногда становится непонятно, какой токен использовать, поскольку Twitter предоставляет две пары токенов и библиотеку. Один из них является секретным ключом.
Вам нужно выбрать те токены, которые начинаются с вашего идентификатора в Twitter, за которым следует дефис.
Теперь ваш вопрос: эта ошибка происходит с некоторыми из ваших пользователей. Итак, вот ответ, который само приложение находит неоднозначным в выборе токена.
Хотя я могу быть не совсем прав, но я рекомендую вам попробовать это решение хотя бы один раз.
Вы подтвердили, что токены работали одновременно? В системе OAuth, над которой я работал, произошла ошибка в том, как токены были надежно сохранены и извлечены, что привело к повреждению небольшого процента из них. Если вы можете подтвердить, что токены работали в прошлом, это хороший первый шаг.
Когда вы извлекаете токены из хранилища, они остаются неизменными? Возможно ли, чтобы они были испорчены тем, как вы управляете ими?
Поместите некоторые записи в журнал, чтобы отслеживать, когда токены работают и выходят из строя. Токен когда-нибудь снова начинает работать после того, как он один раз вышел из строя? Если вы не сможете использовать токен в течение 30 дней, срок его действия истекает? С подробным журналом вы можете начать определять маркеры с истекшим сроком действия и искать используемые шаблоны, чтобы указать, что может привести к их истечению.
Обязательно изучите и другие возможности. Как пользователи отменяют токены в Твиттере? Легко ли случайно это сделать? Для пользователей с неисправными токенами, есть ли у них другие авторизованные приложения, которые также перестали работать?
Ответ моего Бога верен, но я поделюсь своим ответом на другой вопрос, объясняющий, как это могут быть часы вашего компьютера:
Если ваш поток OAuth работал один день, а следующий - не получался, проверьте часы вашего компьютера. Я запускал ящик Vagrant, для которого каким-то образом было установлено время накануне, в результате чего API Twitter возвратил {"code":89,"message":"Неверный или устаревший токен".}. Это также может отображаться как отметка времени 401 за пределами. Вы можете использовать эту команду для обновления ваших часов в Ubuntu:
sudo ntpdate time.nist.gov
Альтернативный метод, если ntpdate
недоступно в вашей системе:
sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"
Возможно, эти пользователи не аннулировали доступ. Но по моему опыту срок действия маркера доступа также может истечь после того, как пользователь (в тестовых случаях: я) изменил свой пароль.
Когда пользователь делает это, вы больше не можете использовать REST API потокового API в области этого пользователя. Пожалуйста, адаптируйте ваше приложение, чтобы справиться с этой ситуацией. Отмените сеанс пользователя, поэтому, когда он вернется к вашему приложению, его / ее снова можно будет перенаправить в Twitter, чтобы запустить новый процесс токена доступа OAuth. Или отправьте ему / ей электронное письмо с просьбой восстановить соединение. Vimeo/Windows/... - это те, кто обрабатывает токены с истекшим сроком действия по электронной почте.
Повеселись!
Если ваш токен доступа =738629462149844993-FcWHjfcucCLGEosyGGQ38qI******iC, не забудьте указать дефис (-), за которым следует ваш USERID.
Попробуйте заново создать ключи и правильно их сохранить.
Для меня это произошло потому, что после регенерации одного из ключей я не обновлял другие ключи. Поэтому удалил и регенерировал все 4 ключа снова (CONSUMER_KEY, CONSUMER_SECRET, ACCESS_KEY, ACCESS_SECRET). И попытался выполнить это снова, и на этот раз это сработало.
Ошибка invalid or expired token
можно связать с тем, что он не платит.
Без оплаты можно будет создать только среду разработки (песочницу).
Как я ответил здесь:
Counts доступен только для платных премиум-аккаунтов, и за премиум-доступ нужно платить.
Может быть, это будет полезно для вас. Я столкнулся с той же проблемой.
Пожалуйста, найдите фрагмент кода ниже
$code = $tmhOAuth->user_request(array(
'method' => 'POST',
'url' => $tmhOAuth->url('oauth/access_token', ''),
'params' => array(
'oauth_verifier' => trim($params['oauth_verifier']),
)
));
if ($code == 200) {
$oauth_creds = $tmhOAuth->extract_params($tmhOAuth->response['response']);
// echo '<pre>';print_r($oauth_creds);exit;
$tmhOAuth->reconfigure(array_merge($tmhOAuth->config, array(
'token' => $oauth_creds['oauth_token'],
'secret' => $oauth_creds['oauth_token_secret'],
)));
$code = $tmhOAuth->user_request(array(
'url' => $tmhOAuth->url('1.1/account/verify_credentials')
));
}