WP REST APIで手が汚れています。私はいくつかのチュートリアルを見てきましたが、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 );
}
});
});
} );
このチュートリアルでは、投稿var status = 'draft'; (コード参照)それで、私はただ誰かがそのステータスをハッキングできないのではないかと心配しているだけですか?
それはだれによります。ログアウトしたユーザーはまったく投稿を作成できません。加入者もできません。投稿者は投稿を作成できますが、公開はできません。ただし、作成者または編集者の役割では、公開に変更できます。
それで、ユーザーがログインしていて、彼らが投稿を公開することができる役割を持っているとしましょう、そして彼らはそのページにいます、そしてあなたは彼らがstatus = "draft"
をstatus = "publish"
に変更するかもしれないことを心配します。
まず、status
name__変数は、コードのバグのために決して使用されません。投稿はdraft
name__投稿として作成されます。あなたがそう言ったわけではなく、それがデフォルトのステータスだからです。
このバグを修正するには、これをdata
name__に追加する必要があります。
status: status
そうするまで、彼らはstatus
name__を"banana"
に変更することができました、そして、それは何もしませんでした。
REST APIは、ユーザーがどのページにアクセスしているかを知りません。それはREST APIの動作方法ではありません。彼らができることとできないことは機能によって制御されます。
それでは、自分自身で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 APIには3つのことが必要です。
テーマからのコードを使用したり、コードをロードしたりする必要はありません。彼らがログインしていて、それらが機能を持っている限り、それはそれらを許可するでしょう。
これがあなたの質問の核心であり、答えはそれによって異なりますです。 「はい」か「いいえ」のどちらかをあなたに言う人は誰もが嘘つきであり、それを通って考えたことはありません。
たとえば、contributor
name__は投稿を公開できないため、post_status
をpublish
name__に変更した場合、APIはリクエストを拒否します。試みたものは禁止されていることを伝えるJSON構造と、403許可されていないHTTP応答コードを受け取ります。
subscriber
name__ユーザーが試みた場合、ステータスがdraft
name__であっても、購読者は投稿を作成できないため、拒否されます。試みたものは禁止されていることを伝えるJSON構造と、403許可されていないHTTP応答コードを受け取ります。
administrator
name__ロールがそれを試しても、administrator
name__ロールは何でもできるのでうまくいきます。あなたは200のHTTPコード成功応答を得るでしょう。 editor
name__のauthor
name__と同じです。これらのロールは、wp-admin
に移動して[公開]ボタンをクリックできることからわかるように、これらのロールで可能になるためです。
これは、それらの役割には、その役割に割り当てられた投稿を公開する機能があるためです。その機能を削除した場合、REST APIまたはWP管理インターフェイスで公開できなくなります。
ご覧のとおり、リクエストを行っているログインユーザーの役割と機能によって異なります