web-dev-qa-db-ja.com

WP REST JavaScriptを使用したAPI投稿ステータス

WP REST AP​​Iで手が汚れています。私はいくつかのチュートリアルを見てきましたが、JavaScriptを使用して新しい投稿を作成するという質問があります。

this tutorialでは、投稿var status = 'draft';(codeを参照)。 それで、私はただ誰かがその状態をハッキングできないのではないかと心配しているだけですか?

jQuery( document ).ready( function ( $ ) {
    $( '#post-submission-form' ).on( 'submit', function(e) {
        e.preventDefault();
        var title = $( '#post-submission-title' ).val();
        var excerpt = $( '#post-submission-excerpt' ).val();
        var content = $( '#post-submission-content' ).val();
        var status = 'draft'; // this code

        var data = {
            title: title,
            excerpt: excerpt,
            content: content
        };

        $.ajax({
            method: "POST",
            url: POST_SUBMITTER.root + 'wp/v2/posts',
            data: data,
            beforeSend: function ( xhr ) {
                xhr.setRequestHeader( 'X-WP-Nonce', POST_SUBMITTER.nonce );
            },
            success : function( response ) {
                console.log( response );
                alert( POST_SUBMITTER.success );
            },
            fail : function( response ) {
                console.log( response );
                alert( POST_SUBMITTER.failure );
            }

        });

    });

} );
1
pixelngrain

このチュートリアルでは、投稿var status = 'draft'; (コード参照)それで、私はただ誰かがそのステータスをハッキングできないのではないかと心配しているだけですか?

それはだれによります。ログアウトしたユーザーはまったく投稿を作成できません。加入者もできません。投稿者は投稿を作成できますが、公開はできません。ただし、作成者または編集者の役割では、公開に変更できます。


それで、ユーザーがログインしていて、彼らが投稿を公開することができる役割を持っているとしましょう、そして彼らはそのページにいます、そしてあなたは彼らがstatus = "draft"status = "publish"に変更するかもしれないことを心配します。

まず、あなたのコードのバグ

まず、statusname__変数は、コードのバグのために決して使用されません。投稿はdraftname__投稿として作成されます。あなたがそう言ったわけではなく、それがデフォルトのステータスだからです。

このバグを修正するには、これをdataname__に追加する必要があります。

status: status

そうするまで、彼らはstatusname__を"banana"に変更することができました、そして、それは何もしませんでした。

次に、RESTはステートレスです。

REST AP​​Iは、ユーザーがどのページにアクセスしているかを知りません。それはREST AP​​Iの動作方法ではありません。彼らができることとできないことは機能によって制御されます。

それでは、自分自身でAPIを突くことができるときに自分の変数を変更できるのであれば、だれが気にしますか?

彼らは彼らのブラウザの開発ツールコンソールに次のコードをコピーペーストすることができます。

$.ajax({
        method: "POST",
        url: POST_SUBMITTER.root + 'wp/v2/posts',
        data: {
            title: "hello world",
            content: "post content",
            status: "publish"
        },
        beforeSend: function ( xhr ) {
            xhr.setRequestHeader( 'X-WP-Nonce', POST_SUBMITTER.nonce );
        },
    });

それに、彼らはあなたのコードを修正する必要はありません。彼らは自分自身を持っています。前述したように、REST AP​​Iには3つのことが必要です。

  • 一回だけ
  • クッキー
  • 求められていることを実行するために必要な機能。

テーマからのコードを使用したり、コードをロードしたりする必要はありません。彼らがログインしていて、それらが機能を持っている限り、それはそれらを許可するでしょう。

REST AP​​Iで投稿ステータスを変更できるのは誰ですか?

これがあなたの質問の核心であり、答えはそれによって異なりますです。 「はい」か「いいえ」のどちらかをあなたに言う人は誰もが嘘つきであり、それを通って考えたことはありません。

たとえば、contributorname__は投稿を公開できないため、post_statuspublishname__に変更した場合、APIはリクエストを拒否します。試みたものは禁止されていることを伝えるJSON構造と、403許可されていないHTTP応答コードを受け取ります。

subscribername__ユーザーが試みた場合、ステータスがdraftname__であっても、購読者は投稿を作成できないため、拒否されます。試みたものは禁止されていることを伝えるJSON構造と、403許可されていないHTTP応答コードを受け取ります。

administratorname__ロールがそれを試しても、administratorname__ロールは何でもできるのでうまくいきます。あなたは200のHTTPコード成功応答を得るでしょう。 editorname__のauthorname__と同じです。これらのロールは、wp-adminに移動して[公開]ボタンをクリックできることからわかるように、これらのロールで可能になるためです。

これは、それらの役割には、その役割に割り当てられた投稿を公開する機能があるためです。その機能を削除した場合、REST AP​​IまたはWP管理インターフェイスで公開できなくなります。

ご覧のとおり、リクエストを行っているログインユーザーの役割と機能によって異なります

1
Tom J Nowell