web-dev-qa-db-ja.com

WP REST API:ユーザーがログインしているかどうかを確認する

アイデアは、REST API、AngularJSを使用してすべてのデータをフェッチするテーマでサイトの一部のセクションを表示または非表示にすることです。

私はこのチェックが役立つと思いました(ドキュメントで提案されているように、ヘッダーとして渡されることはありません):

wp_localize_script('angularjs', 'params', array(
    'nonce' => wp_create_nonce('wp_rest'),
    'nonce_verify' => wp_verify_nonce($_REQUEST['X-WP-Nonce'], 'wp_rest')
));

nonceパラメーターは機能し、AngularJSを介してリクエストヘッダーとして渡すことができます。これにより、ロギングが成功します。しかし nonce_verifyは期待どおりではありませんでした。

質問:Cookie認証を使用しているときにユーザーがログインしているかどうかを確認する方法はありますか?ありがとうございました。

編集:私はナンスの値をローカライズしたので、このangularJSコードでそれを取得する必要がありました。ここで認証が行われます:

$httpProvider.interceptors.Push(function () {
            return {
                'request' : function (config) {
                    config.headers = config.headers || {};

                    config.headers['X-WP-Nonce'] = params.nonce;

                    return config;
                }
            }
        });
1
Daniele Squalo

クライアント側のスクリプトは簡単に操作できるため、JavaScriptにナンスを渡して検証するべきではありません。代わりに、フロントエンドのコンテンツからナンスを取得し、それをサーバーに渡して検証する必要があります。

検証後、コンテンツをJavaScriptファイルではなくserverで出力することを決定する必要があります。

このようなもの:

if ( is_user_logged_in() ) {
    if ( wp_verify_nonce($_REQUEST['X-WP-Nonce'], 'wp_rest') {
        // Nonce is correct!
    } else {
        // Don't send the data, it's a trap!
    }
}

補足として、REST APIは、渡されたクエリを取得する独自のメソッドを提供します。したがって、コールバック関数でこのように取得できます。

function foobar( \WP_REST_Request $request ) {
    $nonce = $request['X-WP-Nonce'];
}
3
Jack Johansson