2017-02-22 21 views
10

Próbowałem dodać niestandardowe żądanie.Jak uzyskać bieżący zalogowany użytkownik przy użyciu Wordpress Rest Api?

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(); 
     } 
    )); 
}); 

Ale zawsze zwraca użytkownika o identyfikatorze = 0; Próbowałem też tak:

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(); 
     } 
    )); 
}); 

I zawsze zwraca wartość false. Ale użytkownik jest zalogowany na pewno.

dodałam mój własny logowanie

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); 
     } 
    )); 
}); 

I dodam "X-WP-nonce" w nagłówku na żądanie http

a teraz każde żądanie wyjścia: {"code":"rest_cookie_invalid_nonce","message":"Cookie nonce is invalid","data":{"status":403}}

+2

Dostałeś tę pracę? Czy jesteś w stanie opublikować rozwiązanie? Dzięki – raison

Odpowiedz

5

Z Authentication rozdział, w REST API Handbook:

Uwierzytelnianie plików cookie to podstawowa metoda uwierzytelniania zawarta w pakiecie WordPress . Po zalogowaniu się do pulpitu ustawień pliki cookie są poprawne dla Ciebie, dlatego programiści wtyczki i motywu muszą mieć tylko zalogowanego użytkownika o numerze: .

Jednak interfejs API REST zawiera technikę zwaną nonces, aby uniknąć problemów z CSRF . Dzięki temu inne witryny nie zmuszą Cię do wykonania działań bez wyraźnego zamiaru. Wymaga to nieco szczególnej obsługi interfejsu API dla .

Dla programistów używających wbudowanego interfejsu API języka JavaScript jest on automatycznie obsługiwany dla Ciebie przez . Jest to zalecany sposób używania wtyczek i motywów interfejsu API dla wersji . Niestandardowe modele danych mogą rozszerzać wp.api.models.Base , aby upewnić się, że jest poprawnie wysyłana w przypadku niestandardowych żądań.

Dla programistów wykonujących ręczne żądania Ajax, wartość jednorazowa będzie musiała być przekazana przy każdym żądaniu. Interfejs API używa nonces z zestawem akcji wp_rest. Następnie można je przekazać do API za pomocą parametru _wpnonce Dane (dane POST lub zapytanie o żądania GET) lub poprzez nagłówek .

Oto przykład GET:

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

lub w przypadku:

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

gdzie nonce jest tworzony z

wp_create_nonce('wp_rest'); 

Więc najprawdopodobniej zapomniał o nonce part w testowanie twojego niestandardowego punktu końcowego.

Mam nadzieję, że pomoże!

+0

Wypróbowałem Twoje rozwiązanie i zaktualizowałem swój post. Czy możesz mi pomóc? –

+1

Symbol jednorazowy musi pochodzić z żądania klienta, a nie być generowany w odpowiedzi serwera na resztę. Spróbuj najpierw, na przykład, grać z punktem końcowym '/ wp-json/wp/v2/users/me /', gdzie klient wysyła numer i niech wyświetla bieżące informacje o użytkowniku. @SemyonTikhonenko – birgire

+2

"Interfejs API używa nonces z ustawionym działaniem na' wp_rest' "Tak, zawsze to zmieniam i to mnie zepsuło. – WraithKenny

1

Jeśli wolisz używać JWT Authentication for WP REST API, łatwiejsze może być implementowanie za pomocą Json Web Tokens.

Najpierw uwierzytelnienia klienta wysyłając żądanie HTTP POST do punktu końcowego /wp-json/JWT-auth/v1/żeton wysyłającego użytkownika i hasło pola, aby wygenerować token uwierzytelniający.

Succefull reakcja byłaby podobna do:

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

Następnie można przejść każdy token ustawienia żądania nagłówek żądania Autoryzacja jak:

Authorization: Bear eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9qd3QuZGV2IiwiaWF0IjoxNDM4NTcxMDUwLCJuYmYiOjE0Mzg1NzEwNTAsImV4cCI6MTQzOTE3NTg1MCwiZGF0YSI6eyJ1c2VyIjp7ImlkIjoiMSJ9fX0.YNe6AyWW4B7ZwfFE5wJ0O6qQ8QFcYizimDmBy6hCH_8 
Powiązane problemy