post

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: APIBlogPHPWordpress

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:


Inscreva-se em Nossa News:

Seja notificando sempre que tiver conteúdo novo disponível no meu canal do Youtube ou artigo no meu Blog.

Bruno Devs News


Link Curto para Compartilhamento

Compartilhe esse conteudo nas redes sociais ou por mensagem usando o link curto abaixo. Basta clicar em cima do link para copiar.

bruno.art.br/pb/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


Comentários