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,并在请求成功时处理响应数据。如果请求失败,它会处理错误。


标签:, , , , ,
Top