簡體   English   中英

WordPress JWT - 錯誤驗證 (401)

[英]WordPress JWT - Error authentification (401)

不久前我剛剛發現了 WordPress,在使用帶有自定義端點的 JWT 時遇到了一些問題。

實際上,在正確配置了我的 API 和 JWT 之后,我在 AJAX 請求期間遇到了身份驗證問題。

我覺得奇怪的是我使用 Postman 沒有問題。 所以我認為這是一個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;
}

隨機數

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":"未授權"}

我剛剛做了一個測試:

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

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

        [...]
}

這是答案:

{"readyState":4,"responseText":"---------------------------{"code":"rest_forbidden","message ":"抱歉,您不能這樣做。","data":{"status":401}}","status":401,"statusText":"Unauthorized"}

所以給我的印象是用戶在添加過濾器的時候設置的不好。 但是為什么它對郵遞員有效....?

請確保您已在 htaccess 文件中添加以下代碼

RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM