Я пытаюсь получить access_token пользователя, который только что дал разрешение на мое приложение Twitter. Когда я вхожу в систему, он работает, но только запоминает мой access_token, пока я не обновляюсь или не нажимаю кнопку.Abraham's TwitterOAuth access_token продолжает исчезать после обновления или нажимает кнопку
код, который я использую:
require(__DIR__ . '/../../lib/data/twitter-login-api/autoload.php');
use Abraham\TwitterOAuth\TwitterOAuth;
$oauth_callback = OAUTH_CALLBACK;
$consumer_key = OAUTH_KEY;
$consumer_secret = OAUTH_SECRET;
//Do something if $_REQUEST occur and previous session is equal to current $_REQUEST
if (isset($_REQUEST['oauth_token']) && $_SESSION['oauth_token'] === $_REQUEST['oauth_token']) {
//Open first connection at callback
$connection = new TwitterOAuth($consumer_key, $consumer_secret, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
//Then verify your token
$access_token = $connection->oauth("oauth/access_token", array("oauth_verifier" => $_REQUEST['oauth_verifier']));
//Now you can save them
$_SESSION['new_session_for_oauth_token'] = $access_token['oauth_token'];
$_SESSION['new_session_for_oauth_token_secret'] = $access_token['oauth_token_secret'];
//You may also check it first
$connection = new TwitterOAuth($consumer_key, $consumer_secret, $_SESSION['new_session_for_oauth_token'], $_SESSION['new_session_for_oauth_token_secret']);
$check = $connection->get("account/verify_credentials");
$username = $check->name;
//To echo your account's stat
echo '<p>' . $check->statuses_count . '</p>';
echo '<p>' . $check->friends_count . '</p>';
echo '<p>' . $check->followers_count . '</p>';
echo '<p>' . $check->favourites_count . '</p>';
//And finally unset previous sessions
unset($_SESSION['oauth_token']);
unset($_SESSION['oauth_token_secret']);
//this is the end of callback url
} else {
$connection = new TwitterOAuth($consumer_key, $consumer_secret);
$request_token = $connection->oauth('oauth/request_token', array("oauth_callback" => $oauth_callback));
$_SESSION['oauth_token'] = $request_token['oauth_token'];
$_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];
$twitter_url = $connection->url("oauth/authorize", array("oauth_token" => $request_token['oauth_token']));
}
Он регистрирует меня в одно время, и я получаю access_token и access_token_secret, но мне нужно, чтобы они оставались в сессии, с тем, что я могу использовать его после страницы обновить или нажать на кнопку.
Что я делаю неправильно?
Спасибо за ваш быстрый ответ @ Chay22. Я изменил свой код на пример, который вы мне дали. Он регистрирует меня совершенно, но все равно теряет access_token при обновлении страницы. И да, действительно, я использую один файл PHP для обработки логина и обратного вызова. Это возможно? Я редактировал код выше кода, который я использую сейчас. Должен быть способ заставить это работать правильно? – TomHoevenaars
Всегда лучше разделить логику каждого файла, но в этом состоянии это всего лишь вопрос стиля. Как вы повторно использовали сеанс? Просто обновите эту страницу обратного вызова/запроса? Он не будет работать, поскольку (ваша) цель этой страницы - это просто запрашивать и проверять токен. Получите другую страницу, запустите сеанс, создайте новое соединение, дайте мне знать. – Chay22
Ну, если я прав, должен быть способ сохранить этот access_token в сеансе. Файл PHP, который я использую для этого входа в Twitter, включен в файл, где находится мой HTML. Когда я нажимаю на кнопку, она перенаправляет меня на twitter_url, где я должен авторизовать свое приложение. После этого появляется мое имя (потому что я вошел в систему). Я также получаю access_token и access_token_secret. Когда я исправил эту часть, я хочу опубликовать твит от имени этой учетной записи, которая вошла в систему. – TomHoevenaars