Я пытаюсь аутентифицировать пользователя через API Twitter в Wordpress.
Перенаправление php работает так, как я хочу и как следует, на основе этого примера: https://github.com/tutsplus/tuts-twitter-oauth
СейчасЯ пытаюсь реализовать это в Wordpress, и у меня возникли проблемы с перенаправлением.Что мне нужно, это: 1. файл (login.php, который обрабатывает логин и перенаправляет на страницу callback.php 2. callback.php собирает информацию о пользователе. Эти данные для входа передаются с использованием $ _SESSION и для входа в систему и дляcallback У меня есть две функции php. Поскольку обе функции используют redirect, а wp_redirect должен быть в хуке add_action, мне интересно, как этого добиться.
У меня есть базовый код, который делает все это, но я используюшорткоды, это не очень хорошая идея, так как перенаправление не работает таким образом. В любом случае, я публикую этот код, чтобы вы могли лучше понять, что я делаю:
<?php
require_once 'vendor/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;
ini_set('display_errors', 1);
$GLOBALS['config'] = require_once 'config.php';
function login_user() {
session_start();
$config = $GLOBALS['config'];
// create TwitterOAuth object
$twitteroauth = new TwitterOAuth($config['consumer_key'], $config['consumer_secret']);
// request token of application
$request_token = $twitteroauth->oauth(
'oauth/request_token', [
'oauth_callback' => $config['url_callback']
]
);
// throw exception if something gone wrong
if($twitteroauth->getLastHttpCode() != 200) {
throw new \Exception('There was a problem performing this request');
}
// save token of application to session
$_SESSION['oauth_token'] = $request_token['oauth_token'];
$_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];
// generate the URL to make request to authorize our application
$url = $twitteroauth->url(
'oauth/authorize', [
'oauth_token' => $request_token['oauth_token']
]
);
// and redirect
header('Location:'. $url);
# wp_redirect( $url );
# exit;
}
function callback_user($config) {
session_start();
$config = $GLOBALS['config'];
print('---------------');
print_r($_SESSION);
print('---------------');
// get and filter oauth verifier
$oauth_verifier = filter_input(INPUT_GET, 'oauth_verifier');
// check tokens
if (empty($oauth_verifier) ||
empty($_SESSION['oauth_token']) ||
empty($_SESSION['oauth_token_secret'])
) {
// something's missing, go and login again
header('Location: ' . $config['url_login']);
}
// print_r($_SESSION);
// connect with application token
$connection = new TwitterOAuth(
$config['consumer_key'],
$config['consumer_secret'],
$_SESSION['oauth_token'],
$_SESSION['oauth_token_secret']
);
// request user token
$token = $connection->oauth(
'oauth/access_token', [
'oauth_verifier' => $oauth_verifier
]
);
// connect with user token
$twitter = new TwitterOAuth(
$config['consumer_key'],
$config['consumer_secret'],
$token['oauth_token'],
$token['oauth_token_secret']
);
$user = $twitter->get('account/verify_credentials');
// if something's wrong, go and log in again
if(isset($user->error)) {
header('Location: ' . $config['url_login']);
}
print_r( $user);
}
function ta_login_shortcode() {
ob_start();
login_user();
return ob_get_clean();
}
function ta_callback_shortcode() {
ob_start();
callback_user();
return ob_get_clean();
}
add_shortcode( 'user_callback_ta', 'ta_callback_shortcode' );
add_shortcode( 'user_login_ta', 'ta_login_shortcode' );
?>