Twitter OAuth в WordPress, перенаправить и add_action - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь аутентифицировать пользователя через 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' );



?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...