WordPress JWT - Ошибка аутентификации (401) - PullRequest
0 голосов
/ 21 февраля 2019

Я недавно обнаружил WordPress и столкнулся с некоторыми проблемами при использовании JWT с пользовательской конечной точкой.

Действительно, после правильной настройки моего API и JWT, я столкнулся с проблемой аутентификации во время моего запроса AJAX..

Что мне кажется странным, так это то, что у меня нет проблем с использованием Почтальона.Так что я думаю, что это проблема конфигурации WordPress ...

Вот краткий обзор моего кода, который я сократил, и сделал как можно более понятным для случая.

КонфигурацияJWT:

(. htaccess)

...
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
</IfModule>
...

(wp-config.php)

...
define('JWT_AUTH_SECRET_KEY', 'secretKey...');
define('JWT_AUTH_CORS_ENABLE', true);
...

Ajax (в моей папке плагинов)

jQuery.ajax({
        url: url + '/wp-json/test/v1/test_users' + order,
        type: 'GET',
        headers: 
        {
            'Content-Type': 'application/json',
            'Authorization': 'Bearer myToken...'
        },

        success: function(data) {
            alert('success');
        },

        error : function(data) {
            alert(JSON.stringify(data));
        }
    });

Конечная точка (в моей дочерней теме)

add_action( 'rest_api_init', function () {
            register_rest_route( 'test/v1', '/test_users', array(
                'methods' => 'GET',
                'callback' => array($this, 'get_users'),
                'permission_callback' => function () {
                    return Routes::test_authorized(5);
                }
            ) );
        });

public static function test_authorized($group)
{
    global $wpdb;
    $current_user = wp_get_current_user();

    if (empty($current_user))
        return false;

    $user = ...

       ...

    if (empty($user) || $user == null || $user->test_group > $group)
        return false;

    return true;
}

nonce

add_action('rest_api_init', function () {
            add_filter('jwt_auth_token_before_dispatch', function ($data, $user) {
            // Tells wordpress the user is authenticated
            wp_set_current_user($user->ID);
            $data['nonce'] = wp_create_nonce('wp_rest');
            return $data;
            }, 10, 2);
        });

Спасибо!

РЕДАКТИРОВАТЬ:

Сообщение об ошибке:

{"readyState ": 4," responseText ":" {"code": "rest_forbidden", "message": "Извините, вам не разрешено это делать.", "data": {"status": 401}} ","status": 401, "statusText": "Unauthorized"}

Я только что сделал тест:

public static function test_authorized($group)
{
        [...]

        echo '----------' . $current_user->user_nicename . '--------';

        [...]
}

И вот ответ:

{ "readyState": 4, "responseText": "--------------------------- {" код ":" rest_forbidden», "message": "Извините, вам запрещено это делать.", "data": {"status": 401}} ","status": 401, "statusText": "Unauthorized"}

Так что у меня сложилось впечатление, что пользователь плохо настроен при добавлении фильтра.Но почему это работает на почтальоне ....?

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