Danke, das war genau das Problem! :-) (Na ja, eines der Probleme.)
Es funktioniert nun
generell.
ABER:
Ein Fehler bleibt aber bestehen:
Nach einem Schließen des Browsers (ohne manuelles Ausloggen) muss man sich weiterhin zweimal bei Twitter autorisieren bzw. mein Code leitet weiterhin zweimal auf die Autorisierenseite...?
Aktuelle Version:
PHP-Code:
<?php
// ...
require_once('config.php');
$indexurl = "http://" . $_SERVER['HTTP_HOST'] . rtrim(dirname($_SERVER['PHP_SELF']), '/\\') . "/index.php";
if (isset($_GET["denied"])) {
// Benutzer hat die Anmeldung abgebrochen. Schade.
session_unset();
session_destroy();
}
elseif (!isset($_SESSION["oauth_request_token"])) {
// Der Benutzer hat noch keine Anmeldung.
$oauth = new OAuth($consumer_key,$consumer_secret,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI);
$requestUrl = 'http://api.twitter.com/oauth/request_token';
$authorizeUrl = 'http://api.twitter.com/oauth/authorize';
$tokenInfo = $oauth->getRequestToken($requestUrl);
$_SESSION['oauth_request_token'] = $tokenInfo['oauth_token_secret'];
$location = $authorizeUrl . '?oauth_token=' . $tokenInfo['oauth_token'];
session_write_close();
header('Location: ' . $location);
exit;
}
elseif (!isset($_SESSION["oauth_token"])) {
if (!isset($_GET['oauth_token'])) {
// Der Benutzer ist noch angemeldet, aber seine Session ist irgendwie verschwunden. o_O
// Vermutlich Browser neu gestartet oder so etwas. ;-)
// Daher bekommt er auch kein neues oauth_token. Kein Problem, holen wir ihm halt ein neues.
$_SESSION = array(); // Sitzung leeren
session_write_close();
header("Location: $indexurl");
exit;
}
$oauth = new OAuth($consumer_key,$consumer_secret,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI);
$accessUrl = 'http://api.twitter.com/oauth/access_token';
$oauth->setToken($_GET['oauth_token'], $_SESSION['oauth_request_token']);
$tokenInfo = $oauth->getAccessToken($accessUrl);
$_SESSION["oauth_token"] = $tokenInfo['oauth_token'];
$_SESSION['oauth_token_secret'] = $tokenInfo['oauth_token_secret'];
$oauth->setToken($_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
$oauth->fetch('https://api.twitter.com/1.1/account/verify_credentials.json');
$json = json_decode($oauth->getLastResponse());
$_SESSION["username"] = (string)$json->screen_name; // got it. ;-)
session_write_close();
header("Location: $indexurl");
exit;
}
elseif (isset($_SESSION["username"])) {
// Sollte doch alles in Ordnung sein. :-)
// Alle anderen Fälle werden mir hoffentlich gemeldet. ;-)
header("Location: $indexurl");
exit;
}
?>