我正在编写一些更新选项的代码,使用update_option
使用REST API和apiFetch。
我习惯于使用AJAX来完成这项工作,我会在请求中将nonce传递给我的PHP函数,并检查当前的用户功能。
使用RESTAPI和apiFetch感觉比使用AJAX好得多,但我觉得在安全性方面我缺少了一些东西。
以下是我的想法:
register_rest_route(
$namespace,
\'/update_settings/\',
array(
\'methods\' => WP_REST_Server::EDITABLE,
\'callback\' => array( $this, \'update_settings\' ),
\'permission_callback\' => array( $this, \'update_settings_permission\' ),
)
);
我的
permission_callback
如下所示:
public function update_settings_permission() {
if ( ! current_user_can( \'manage_options\' ) ) {
return $this->error( \'user_dont_have_permission\', __( \'You do not have permission to change options.\' ) );
}
return true;
}
我的update\\u settings函数如下所示:
public function update_settings( WP_REST_Request $request ) {
$new_settings = $request->get_param( \'settings\' );
if ( is_array( $new_settings ) ) {
$current_settings = get_option( \'my_options\', array() );
update_option( \'my_options\', array_merge( $current_settings, $new_settings ) );
}
return $this->success( true );
}
然后请求本身就相当标准:
apiFetch( {
path: \'namespace/v1/update_settings\',
method: \'POST\',
data: {
settings: this.state.settings,
},
} ).then( ( result ) => {
// all done.
} );
这一切都很完美,但似乎太简单了。我是不是应该在什么地方打发时间?apiFetch似乎有一些包含nonce的中间件-这是默认情况下为我们完成的吗?