web-dev-qa-db-fra.com

Comment obtenir un utilisateur actuellement connecté avec Wordpress Rest Api?

J'ai essayé d'ajouter une demande personnalisée.

add_action('rest_api_init', function () {
    register_rest_route( 'custom', '/login', array(
        'methods' => 'GET',
        'callback' => function(WP_REST_Request $request) {
            return wp_get_current_user();
        }
    ));
});

Mais il retourne toujours un utilisateur avec ID = 0; J'ai aussi essayé ceci:

add_action('rest_api_init', function () {
    register_rest_route( 'custom', '/login', array(
        'methods' => 'GET',
        'callback' => function(WP_REST_Request $request) {
            return is_user_logged_in();
        }
    ));
});

Et il retourne toujours false ..__ Mais l'utilisateur est connecté à coup sûr.

J'ai ajouté mon identifiant personnalisé

add_action('rest_api_init', function () {
    register_rest_route( 'custom', '/login', array(
        'methods' => 'POST',
        'callback' => function(WP_REST_Request $request) {
            $nonce = wp_create_nonce("wp_rest");
            $user = wp_signon(array('user_login' => $_POST['username'],
                'user_password' => $_POST['password'], "rememberme" => true), false);
            if (is_wp_error($user)) {
                return $user;
            }

            //do_action( 'wp_login', "capad" );
            //$user['isloggedin'] = is_user_logged_in();
            return array('user' => $user,
                'nonce' => $nonce);
        }
    ));
});

Et j'ajoute "X-WP-Nonce" dans l'en-tête de la requête http

Et maintenant, chaque requête génère: {"code":"rest_cookie_invalid_nonce","message":"Cookie nonce is invalid","data":{"status":403}}

14
Semyon Tikhonenko

Depuis le chapitre Authentification , dans le REST Manuel de l'API):

L'authentification par cookie est la méthode d'authentification de base incluse avec WordPress. Lorsque vous vous connectez à votre tableau de bord, les cookies sont configurés correctement pour vous, donc les développeurs de plugins et de thèmes n’ont besoin que d’avoir un utilisateur connecté.

Cependant, l'API REST inclut une technique appelée nonces pour éviter CSRF problèmes. Cela empêche les autres sites de vous forcer à exécuter des actions sans le vouloir explicitement. Cela nécessite un peu spécial traitement pour l'API.

Pour les développeurs utilisant l'API Javascript intégrée, cela est géré automatiquement pour vous. C'est la méthode recommandée pour utiliser l'API pour plugins et thèmes. Les modèles de données personnalisés peuvent étendre wp.api.models.Base pour s'assurer que cela est envoyé correctement pour toutes les demandes personnalisées.

Pour les développeurs qui font des requêtes Ajax manuelles, le nonce devra être passé avec chaque demande. L'API utilise des nonces avec l'action définie sur wp_rest. Celles-ci peuvent ensuite être transmises à l'API via les données _wpnonce paramètre (soit POST, soit dans la requête pour les requêtes GET), soit via l'en-tête X-WP-Nonce.

Voici un exemple GET:

https://example.tld/wp-json/wp/v2/users/me?_wpnonce=9467a0bf9c

ou dans votre cas:

https://example.tld/wp-json/custom/login/?_wpnonce=9463a0bf9c

où le nonce est créé 

wp_create_nonce( 'wp_rest' );

Il est donc fort probable que vous ayez oublié la partie nonce lors du test de votre noeud final personnalisé.

J'espère que ça aide!

17
birgire

Si vous préférez utiliser Authentification JWT pour WP REST API , il peut être plus facile à implémenter avec les jetons Web Json.

Tout d'abord, vous authentifiez le client qui envoie une demande HTTP POST aux champs du noeud final / wp-json/jwt-auth/v1/token en envoyant username et password pour générer une authentification. jeton. 

Une réponse réussie serait semblable à:

{
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9qd3QuZGV2IiwiaWF0IjoxNDM4NTcxMDUwLCJuYmYiOjE0Mzg1NzEwNTAsImV4cCI6MTQzOTE3NTg1MCwiZGF0YSI6eyJ1c2VyIjp7ImlkIjoiMSJ9fX0.YNe6AyWW4B7ZwfFE5wJ0O6qQ8QFcYizimDmBy6hCH_8",
    "user_display_name": "admin",
    "user_email": "[email protected]",
    "user_nicename": "admin"
}

Ensuite, vous transmettez le jeton à chaque requête en paramétrant l'en-tête de requête Authorization comme:

Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9qd3QuZGV2IiwiaWF0IjoxNDM4NTcxMDUwLCJuYmYiOjE0Mzg1NzEwNTAsImV4cCI6MTQzOTE3NTg1MCwiZGF0YSI6eyJ1c2VyIjp7ImlkIjoiMSJ9fX0.YNe6AyWW4B7ZwfFE5wJ0O6qQ8QFcYizimDmBy6hCH_8
6
Gui

1. Installer et activer Authentification JWT pour le plug-in API WP REST , également installer WP REST plug-in API
2. Maintenant, vous pouvez exécuter n'importe quelle api par défaut wordpress depuis une application mobile ou toute autre source ou par facteur. par exemple, cliquez sur cette adresse depuis votre application ou par facteur. https://example.com/wp-json/wp/v2/posts
3. Par application ou par facteur, Lorsque vous vous connecterez avec des informations valides (en utilisant api restante), vous recevrez un jeton. Pour vous connecter et obtenir un jeton, exécutez l’URL suivante par postman ou par application https://example.com/wp-json/jwt-auth/v1/token
4. De cette façon, vous obtiendrez un jeton comme indiqué sur l'image  postman and jwt authentication
Maintenant, utilisez ce jeton pour obtenir les informations de connexion de l'utilisateur, par exemple
5. make function in function.php

function checkloggedinuser()
{
$currentuserid_fromjwt = get_current_user_id();
print_r($currentuserid_fromjwt);
exit;
}

 add_action('rest_api_init', function ()
{
  register_rest_route( 'testone', 'loggedinuser',array(
  'methods' => 'POST',
  'callback' => 'checkloggedinuser'
  ));
});


6. Maintenant, exécutez à nouveau cette nouvelle URL dans Postman ou dans l'application pour obtenir les informations de connexion de l'utilisateur . https://example.com/wp-json/testone/loggedinuser (remplace exemple.com par votre URL)  enter image description here

1
shiv