WordPress进阶教程——wordpress如何创建api并给使用者添加授权添加限制
Published
2023-02-26
浏览次数 : 245
添加rest api的自定义路由
用register_rest_route()添加api的自定义路由
add_action( 'rest_api_init', function () {
register_rest_route( 'mytheme/v1', '/my-endpoint', array(
'methods' => 'GET',
'callback' => 'mytheme_my_endpoint',
'permission_callback' => 'mytheme_check_permission'
) );
} );
上面这个函数创建了/wp-json/mytheme/v1/my-endpoint这个路由然后mytheme_my_endpoint这个作为回调函数来执行操作,mytheme_check_permission这个函数来执行权限验证。
布置token based 验证
用JSON Web Tokens (JWTs)来布置自定义路由的使用验证,使用firebase/php-jwt 库
function mytheme_my_endpoint( $request ) {
$token = $request->get_header( 'Authorization' );
$counter = wp_cache_get( $token, 'mytheme_usage_counter' );
if ( $counter === false ) {
$counter = 0;
}
if ( $counter >= 100 ) {
return new WP_Error( 'usage_limit_exceeded', 'Usage limit exceeded', array( 'status' => 429 ) );
}
wp_cache_set( $token, $counter + 1, 'mytheme_usage_counter', 86400 ); // 24 hours
// ...rest of the code...
}
上面代码使用wp_cache_get() 从缓存中来返回token的使用次数,将其递增一,并使用wp_cache_set()函数将其存储回缓存中。如果一天使用超过100次就返回错误信息。
创建和发布token
你可以在前端发布表格,允许用户提交邮件信息后,生成token。
function mytheme_generate_token() {
$email = $_POST['email'];
$token = JWT::encode( array( 'email' => $email ), 'secret-key
);
// ...store the token and email in your database...
return $token;
}
上面的代码把客户的邮件地址加密成jwt token, 然后返回token。 你可以将这些存储在数据库为了将来的使用。
在客户端验证token
用ajax的authoraztion header来验证token。下面是使用fetch的实例:
const token = '...'; // retrieve the token from your database fetch( '/wp-json/mytheme/v1/my-endpoint', { headers: { 'Authorization':Bearer ${token}`
}
} )
.then( response => {
if ( response.ok ) {
return response.json();
} else {
throw new Error( response.statusText );
}
} )
.then( data => {
// …process the response data…
} )
.catch( error => {
// …handle errors…
} );
此代码将API请求的Authorization标头设置为从数据库中检索的JWTtoken,并在请求成功时处理响应数据。如果请求失败,它会处理错误。