Restringir Requisições a Custom REST API do WordPress Apenas para Usuários Autenticados (Senha de Aplicação WP) - Bruno Devx - BR Criativus

post #4852

Restringir Requisições a Custom REST API do WordPress Apenas para Usuários Autenticados (Senha de Aplicação WP)

Publicado em: 07/04/2024 / Atualizado em: 07/04/2024

Categorias: BlogAPIPHPWordpress

O WordPress possui um recurso chamado “Senha de Aplicação”, que possibilita que você restrinja acesso a API interna dele, para apenas aplicações autenticadas, como mostra abaixo:

image

Para isso, acesse a página do usuário que deseja criar uma senha de aplicação, e la em baixo, crie uma dando um nome apenas. O WordPress vai criar a senha para você.

Depois disso, basta criar o seu endpoit customizado no WordPress, como por exemplo:

function endpoit_customizado_teste() {
    register_rest_route('api-interna/v1', '/ola_mundo/', array(
        'methods' => 'POST',
        'callback' => 'minha_funcao_teste',
        'permission_callback' => function () {
            return current_user_can('edit_posts'); // Apenas usuarios com permissão de editar post pode realizar requisições para esta URL
        }
    ));
}

add_action('rest_api_init', 'endpoit_customizado_teste');

function minha_funcao_teste($request) {
  return $request->get_param('mensagem'); // Ola mundo
}

Para fazer uma requisição para este código, segue exemplos abaixo:

<?php

$url = "https://SEUSITE.com.br/wp-json/api-interna/v1/ola_mundo";

$username = "seuUsuario"; // Substitua pelo seu nome de usuário do WordPress
$applicationPassword = "suaSenhaDeAplicacao"; // Substitua pela senha da aplicação do WordPress

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

// Codifica o nome de usuário e a senha em Base64
$credenciais = base64_encode("$username:$applicationPassword");

$headers = array(
   "Authorization: Basic $credenciais",
   "Content-Type: application/x-www-form-urlencoded",
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);

// Dados que você quer enviar
$data = http_build_query([
    'mensagem' => 'Olá mundo'
]);

curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

//for debug only!
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

$resp = curl_exec($curl);
curl_close($curl);
var_dump($resp);

?>

Publicações recomendadas:



Link Direto

Compartilhe esse conteudo nas redes sociais ou por mensagem usando o link direto abaixo. Basta copiar.

bruno.art.br/?p=4852

ID de Referência: 4852

Sugira uma publicação

Envie uma mensagem e sugira um publicação sobre um assunto que tenha dificuldades de resolver.

Clique aqui e entre em contato