2017-02-22 44 views
10

私はカスタムリクエストを追加しようとしました。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(); 
     } 
    )); 
}); 

しかし、常にID = 0のユーザーを返します。 また、私はこの試みた:

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

をそして、それは常にfalseを返します。 しかし、ユーザーは確実にログインしています。

私は私のカスタムログイン

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

を追加したと私は、HTTPリクエスト

そして今、すべての要求出力のヘッダとしての "X-WP-ナンス" を追加しますから{"code":"rest_cookie_invalid_nonce","message":"Cookie nonce is invalid","data":{"status":403}}

+2

を、あなたは、この作業を取得しましたか?ソリューションを投稿できますか?ありがとうございました – raison

答えて

5

Authentication章、REST APIハンドブック

Cookie認証は、 WordPressに含まれている基本的な認証方法です。ダッシュボードにログインすると、クッキー が正しく設定されるため、プラグインとテーマ開発者は ログインユーザーのみが必要です。

ただし、REST APIには、CSRF の問題を回避するためのnoncesというテクニックが含まれています。これにより、他のサイトが明示的に意図しない操作を実行するのを防ぐことができます( )。これには少し特別なAPIの処理が必要です( )。

組み込みのJavascript APIを使用している開発者の場合、これは自動的に として処理されます。これは、 プラグインとテーマのAPIを使用するための推奨される方法です。カスタムデータモデルでは、wp.api.models.Base を拡張して、カスタム要求に対してこれが正しく送信されるようにすることができます。

手動のAjaxリクエストを作成する開発者の場合、ノンスは各リクエストで になる必要があります。 APIはnoncesを使用して、アクションを wp_restに設定します。これらは、_wpnonceデータ パラメータ(POSTデータまたはGET要求のクエリのいずれか)、または のX-WP-Nonceヘッダーを介してAPIに渡すことができます。

はここでGETの例です:

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

またはあなたの場合:

ナンスは、だから、ほとんどの場合、あなたが忘れてしまった

wp_create_nonce('wp_rest'); 

から作成された

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

ナンス部分 wカスタムエンドポイントをテストします。

希望すると助かります!

+0

私はあなたのソリューションを試して、私は自分の投稿を更新しました。あなたは助けてもらえますか? –

+1

ノンスは、クライアントの要求と共に来なければならず、残りのサーバの応答では生成されません。たとえば、クライアントがnonceを送信し、現在のユーザ情報を表示させる '/ wp-json/wp/v2/users/me /'エンドポイントを使って遊んでみてください。 @SemyonTikhonenko – birgire

+2

"APIはnoncesを使用し、アクションは' wp_rest'に設定されています "ええ、私はいつもそれを変更してしまい、 – WraithKenny

1

JWT Authentication for WP REST APIを使用したい場合は、Json Webトークンで実装する方が簡単です。

まず、認証トークンを生成するフィールドユーザ名パスワードを送信トークン/エンドポイントに/WP-JSON/JWT-AUTH/V1をHTTP POSTリクエストを送信するクライアントを認証。そして、あなたは、各要求の設定などのリクエストヘッダ認証トークンを渡す

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

succefull応答は次のようになり

Authorization: Bear eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9qd3QuZGV2IiwiaWF0IjoxNDM4NTcxMDUwLCJuYmYiOjE0Mzg1NzEwNTAsImV4cCI6MTQzOTE3NTg1MCwiZGF0YSI6eyJ1c2VyIjp7ImlkIjoiMSJ9fX0.YNe6AyWW4B7ZwfFE5wJ0O6qQ8QFcYizimDmBy6hCH_8 
関連する問題