Ketika kita mendaftarkan rute istirahat register_rest_route()
, maka kita dapat menggunakan permission_callback
parameter dengan jenis izin yang kita inginkan.
Periksa misalnya bagaimana WP_REST_Posts_Controller::register_routes()
dan WP_REST_Users_Controller::register_routes()
menerapkan panggilan balik izin.
Argumen kata sandi yang Anda maksud adalah kata sandi konten, yang dapat Anda atur untuk setiap posting dan itu tidak sama.
Tetapi karena Anda ingin menargetkan rute yang ada, seperti:
/wp/v2/cards
/wp/v2/cards/(?P<id>[\d]+)
/wp/v2/cards/...possibly some other patterns...
Anda dapat mencoba mis. rest_dispatch_request
filter untuk mengatur pemeriksaan izin tambahan untuk jenis rute tersebut.
Ini plugin demo:
add_filter( 'rest_dispatch_request', function( $dispatch_result, $request, $route, $hndlr )
{
$target_base = '/wp/v2/cards'; // Edit to your needs
$pattern1 = untrailingslashit( $target_base ); // e.g. /wp/v2/cards
$pattern2 = trailingslashit( $target_base ); // e.g. /wp/v2/cards/
// Target only /wp/v2/cards and /wp/v2/cards/*
if( $pattern1 !== $route && $pattern2 !== substr( $route, 0, strlen( $pattern2 ) ) )
return $dispatch_result;
// Additional permission check
if( is_user_logged_in() ) // or e.g. current_user_can( 'manage_options' )
return $dispatch_result;
// Target GET method
if( WP_REST_Server::READABLE !== $request->get_method() )
return $dispatch_result;
return new \WP_Error(
'rest_forbidden',
esc_html__( 'Sorry, you are not allowed to do that.', 'wpse' ),
[ 'status' => 403 ]
);
}, 10, 4 );
tempat kami menargetkan /wp/v2/cards
dan /wp/v2/cards/*
MENDAPATKAN rute, dengan pemeriksaan izin pengguna tambahan.
Saat men-debug-nya dengan otentikasi cookie WordPress, kita dapat mis mengujinya langsung dengan:
https://example.tld/wp-json/wp/v2/cards?_wpnonce=9467a0bf9c
dari mana bagian nonce dihasilkan wp_create_nonce( 'wp_rest' );
Semoga ini membantu!
register_post_type_args
filter dan e, g, ditetapkan$args['show_in_rest'] = is_user_logged_in();
untuk jenis posting tertentu atau berdasarkan$args['rest_base']
. Tidak yakin apakah itu diinginkan atau direkomendasikan ;-)Bidang "kata sandi" yang Anda lihat sebenarnya bukan untuk REST API, tetapi untuk entri Pos itu sendiri. Setiap posting di WordPress dapat dilindungi kata sandi sehingga Anda memerlukan kata sandi untuk melihat kontennya.
Bentuk kata sandi individu ini bukan mekanisme kata sandi yang kuat, ini kata sandi bersama. Kata sandinya sama untuk semua pengguna, dan disimpan dalam basis data yang tidak dienkripsi dan tidak diacak. Itu tidak pernah dimaksudkan sebagai mekanisme yang aman dengan cara apa pun, itu adalah mekanisme sederhana untuk menyembunyikan konten dengan cara sederhana.
Jika Anda ingin menggunakan mekanisme ini dengan REST API, maka dimungkinkan. Misalnya, jika ID setiap posting adalah 123, maka sebuah posting dapat diambil seperti:
http://example.com/wp-json/wp/v2/posts/123
Jika posting itu dilindungi kata sandi, maka URL ini akan mengambilnya:
http://example.com/wp-json/wp/v2/posts/123?password=example-pass
Referensi: https://developer.wordpress.org/rest-api/reference/posts/#retrieve-a-post
Jika Anda membutuhkan otentikasi berbasis pengguna yang lebih kuat, maka WordPress menawarkan cara untuk membuat posting "pribadi". Pengaturan ini membuat posting hanya dapat dilihat oleh akun pengguna yang memiliki kemampuan "read_private_posts", yang terbatas pada peran Administrator dan Editor secara default. (Catatan: Pribadi hanya membuat konten tulisan menjadi pribadi, Judul mereka masih dapat diekspos.)
Saat Anda membuat jenis posting khusus, kapabilitas yang sama ini dipetakan ke jamak jenis Anda (menggunakan plural_base). Jadi untuk jenis kartu pos, akan ada izin "read_private_cards" serupa yang tersedia untuk Anda tetapkan ke peran pengguna jika diinginkan.
Sekarang, Otentikasi pada tingkat pengguna sebenarnya tidak dibangun ke dalam REST API. Autent berbasis cookie WordPress standar berfungsi dengan baik, namun API tidak menawarkan cara untuk mendapatkan cookie itu. Ini akan menerimanya jika ada, tetapi Anda harus melakukan aliran login normal untuk mendapatkan cookie seperti itu. Jika Anda menginginkan pendekatan otentikasi lain, maka Anda memerlukan plugin untuk itu.
Ada empat plugin seperti itu. Ini adalah OAuth 1.0, Kata Sandi Aplikasi, Token Web JSON, dan plugin Otentikasi Dasar. Perhatikan bahwa Otentikasi Dasar paling mudah, tetapi juga tidak aman dan karenanya hanya disarankan untuk tujuan pengujian dan pengembangan. Seharusnya tidak digunakan pada server produksi langsung.
Anda dapat menemukan informasi lebih lanjut tentang plugin ini di sini:
https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/#authentication-plugins
sumber