Создание функции php для твиттера oAuth

Я успешно реализовал войти, используя твиттер страница, которая показывает кнопку входа в систему, которая перенаправляет в твиттер, позволяет пользователю войти в систему и одобрить мое приложение, а затем перенаправляет обратно.

Мой вопрос: Есть ли способ изменить это на структуру вызова функции вместо этого? В идеале функция вызывается через нажатие кнопки index.php, откроет всплывающее окно, где они могут войти в твиттер, авторизовать приложение и закрыть его, пока index.php сам получил возврат функции.

Если это возможно, я просто положу весь код process.php (за исключением включений) в функцию, и вызвать ее?

Например, звонок на index.php
$name_twitter = get_twitter_handle();

и функция является

function get_twitter_handle(){
//the code of process.php
return $screen_name
}

Ниже приведен мой код, который работает отлично, но не в формате вызова функции.

Код для Process.php

<?php
session_start();
include_once("config.php");
include_once("inc/twitteroauth.php");

if (isset($_REQUEST['oauth_token']) && $_SESSION['token']  !== $_REQUEST['oauth_token']) {

// if token is old, distroy any session and redirect user to index.php
session_destroy();
header('Location: ./index.php');

}elseif(isset($_REQUEST['oauth_token']) && $_SESSION['token'] == $_REQUEST['oauth_token']) {

// everything looks good, request access token
//successful response returns oauth_token, oauth_token_secret, user_id, and screen_name
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['token'] , $_SESSION['token_secret']);
$access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']);
if($connection->http_code=='200')
{
//redirect user to twitter
$_SESSION['status'] = 'verified';
$_SESSION['request_vars'] = $access_token;

// unset no longer needed request tokens
unset($_SESSION['token']);
unset($_SESSION['token_secret']);
header('Location: ./index.php');
}else{
die("error, try again later!");
}

}else{

if(isset($_GET["denied"]))
{
header('Location: ./index.php');
die();
}

//fresh authentication
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);
$request_token = $connection->getRequestToken(OAUTH_CALLBACK);

//received token info from twitter
$_SESSION['token']          = $request_token['oauth_token'];
$_SESSION['token_secret']   = $request_token['oauth_token_secret'];

// any value other than 200 is failure, so continue only if http code is 200
if($connection->http_code=='200')
{
//redirect user to twitter
$twitter_url = $connection->getAuthorizeURL($request_token['oauth_token']);
header('Location: ' . $twitter_url);
}else{
die("error connecting to twitter! try again later!");
}
}
?>

Код для Index.php

<?php
session_start();
include_once("config.php");
include_once("inc/twitteroauth.php");
?>
<html>
<head>
<title>Verify Twitter Handle</title>
</head>
<body>
<?php
if(isset($_SESSION['status']) && $_SESSION['status']=='verified')
{   //Success, redirected back from process.php with verified status.
//retrive variables
$screenname         = $_SESSION['request_vars']['screen_name'];
echo $screenname;
echo '<br>';
}else{
//login button
echo '<a href="process.php"><img src="https://web-answers.ru/wp-content/uploads/2019/03/sign-in-with-twitter-l.png" width="151" height="24" border="0" /></a>';
}
?>
</body>
</html>

1

Решение

session_start();
include_once("config.php");
include_once("inc/twitteroauth.php");
function get_twitter_handle(){
if (isset($_REQUEST['oauth_token']) && $_SESSION['token']  !== $_REQUEST['oauth_token']) {

// if token is old, distroy any session and redirect user to index.php
session_destroy();
header('Location: ./index.php');

}elseif(isset($_REQUEST['oauth_token']) && $_SESSION['token'] == $_REQUEST['oauth_token']) {

// everything looks good, request access token
//successful response returns oauth_token, oauth_token_secret, user_id, and screen_name
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['token'] , $_SESSION['token_secret']);
$access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']);
if($connection->http_code=='200')
{
//redirect user to twitter
$_SESSION['status'] = 'verified';
$_SESSION['request_vars'] = $access_token;

// unset no longer needed request tokens
unset($_SESSION['token']);
unset($_SESSION['token_secret']);
header('Location: ./index.php');
}else{
die("error, try again later!");
}

}else{

if(isset($_GET["denied"]))
{
header('Location: ./index.php');
die();
}

//fresh authentication
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);
$request_token = $connection->getRequestToken(OAUTH_CALLBACK);

//received token info from twitter
$_SESSION['token']          = $request_token['oauth_token'];
$_SESSION['token_secret']   = $request_token['oauth_token_secret'];

// any value other than 200 is failure, so continue only if http code is 200
if($connection->http_code=='200')
{
//redirect user to twitter
$twitter_url = $connection->getAuthorizeURL($request_token['oauth_token']);
header('Location: ' . $twitter_url);
}else{
die("error connecting to twitter! try again later!");
}
}
}
?>
<html>
<head>
<title>Verify Twitter Handle</title>
</head>
<body>
<?php
get_twitter_handle();
if(isset($_SESSION['status']) && $_SESSION['status']=='verified')
{   //Success, redirected back from process.php with verified status.
//retrive variables
$screenname         = $_SESSION['request_vars']['screen_name'];
echo $screenname;
echo '<br>';
}else{
//login button
echo '<a href="index.php"><img src="https://web-answers.ru/wp-content/uploads/2019/03/sign-in-with-twitter-l.png" width="151" height="24" border="0" /></a>';
}
?>
</body>
</html>
3

Другие решения

PHP не имеет состояния при загрузке страницы, кроме файлов cookie, которые также используют его собственные сеансы.

Логика, чтобы открыть всплывающее окно в браузере, требует, чтобы вы уже отправили страницу в браузер, поэтому нет, вы не можете запустить что-либо, требующее от браузера сделать что-либо в функции перед обычной логикой страницы.

Одна вещь, которую вы Можно сделать это перенаправить к себе. Просто есть функция, которую вы всегда вызываете, скажем check_auth(), это ничего не делает, если текущий сеанс уже вошел в систему, и делает магию, включая перенаправление на тот же сайт плюс exit(0); в конце, иначе.

1

По вопросам рекламы [email protected]