// Создаем новую конечную точку для получения JWT токена add_action('rest_api_init', function() { register_rest_route('spb-api/v1', '/token', [ 'methods' => 'POST', 'callback' => 'custom_jwt_auth', 'permission_callback' => '__return_true', // Позволяет любому пользователю обращаться к конечной точке ]); }); // Логика для новой конечной точки function custom_jwt_auth(WP_REST_Request $request) { $username = $request->get_param('username'); $password = $request->get_param('password'); // Проверяем, предоставлены ли логин и пароль if (empty($username) || empty($password)) { return new WP_Error('missing_credentials', 'Username or password is missing', ['status' => 400]); } // Аутентификация пользователя $user = wp_authenticate($username, $password); if (is_wp_error($user)) { return $user; // Возвращаем ошибку аутентификации } // Генерация JWT токена $token = \Firebase\JWT\JWT::encode([ 'iss' => get_bloginfo('url'), // Источник токена 'iat' => time(), // Время создания токена 'nbf' => time(), // Токен действителен с текущего времени 'exp' => time() + (DAY_IN_SECONDS * 7), // Истекает через 7 дней 'data' => [ 'user' => [ 'id' => $user->ID, ] ] ], JWT_AUTH_SECRET_KEY, 'HS256'); // Возвращаем токен и информацию о пользователе return [ 'token' => $token, 'user_id' => $user->ID, 'user_email' => $user->user_email, 'user_nicename' => $user->user_nicename, 'user_display_name' => $user->display_name, ]; } // Удаляем стандартные конечные точки плагина JWT add_filter('rest_endpoints', function($endpoints) { if (isset($endpoints['/jwt-auth/v1/token'])) { unset($endpoints['/jwt-auth/v1/token']); } if (isset($endpoints['/jwt-auth/v1/token/validate'])) { unset($endpoints['/jwt-auth/v1/token/validate']); } return $endpoints; }); September 15, 2022 - BD Design Zone