на самом деле, это должно быть сочетание PHP $_SESSION
с обратными вызовами OAuth. После обратного вызова установите текущий идентификатор пользователя, который вы вставили в базу данных, или запросите «user_id» из ответа Twitter OAuth (который вы также должны сохранить в базе данных вместе с именем пользователя), затем используйте его для использования в будущем и используйте $_SESSION
содержит данные зарегистрированных пользователей в вашей собственной базе данных.
Итак, для быстрого примера
function action_login()
{
if ( ! $this->user->is_logged())
{
// Create TwitterOAuth object with our Twitter provided keys
$tOAuth = new TwitterOAuth($this->config->get('consumer_key'), $this->config->get('consumer_secret'));
// Generate request tokens
$requestToken = $tOAuth->getRequestToken(url::site('auth/twitter','http'));
$_SESSION["oauth_token"] = $requestToken["oauth_token"];
$_SESSION["oauth_token_secret"] = $requestToken["oauth_token_secret"];
// Display Twitter log in button with encoded link
$this->view->set('url', $tOAuth->getAuthorizeURL($requestToken["oauth_token"]));
$_SESSION['current_url'] = Request::detect_uri();
}
echo $this->view->render();
}
public function action_twitter()
{
if ( empty($_GET["denied"]) && isset($_GET["oauth_token"]))
{
if ($_GET["oauth_token"] == @$_SESSION["oauth_token"])
{
// Use generated request tokens (from session) to construct object
$tOAuth = new TwitterOAuth($this->config->get('consumer_key'), $this->config->get('consumer_secret'), $_SESSION["oauth_token"], $_SESSION["oauth_token_secret"]);
// Retrieve access token from Twitter
$accessToken = $tOAuth->getAccessToken();
// Check we have valid response
if(is_numeric($accessToken["user_id"])) {
// Remove request token session variables
if ($this->user->loaded() || $this->user->where('user_id', '=', $accessToken['user_id'])->find()->loaded())
{
$this->user->values(array(
'oauth_token' => $accessToken['oauth_token'],
'oauth_token_secret' => $accessToken['oauth_token_secret'],
'screen_name' => $accessToken['screen_name'],
))->update();
}
else
{
$this->user->values(array(
'user_id' => $accessToken['user_id'],
'oauth_token' => $accessToken['oauth_token'],
'oauth_token_secret' => $accessToken['oauth_token_secret'],
'screen_name' => $accessToken['screen_name'],
))->create();
}
unset($_SESSION["oauth_token"]);
unset($_SESSION["oauth_token_secret"]);
echo $this->view->render();
// Redirect to main page
}
}
}
$this->request->redirect($_SESSION['current_url']);
}
так что, по сути, АВТОМАТИЧЕСКИЙ ВХОД (например, пользователь уже зарегистрирован в твиттере и уже зарегистрирован на вашем сайте) не может быть выполнен без его нажатия кнопки «ВХОД С TWITTER», если вы не установите время жизни вашего $_SESSION
довольно высоко (как, например, с twitpic).
$this->user->is_logged()
проверяет $_SESSION['id']
(автоинкремент на MYSQL) и $_SESSION['twitter']['user_id']
из твиттера info
РЕДАКТИРОВАТЬ: Кроме того, самый быстрый и чистый способ сделать это, сделать вызов AJAX на странице загрузки с учетными данными Twitter с использованием Javascript SDK, а затем установить переменные $_SESSION
с информацией, предоставленной SDK.