代码之家  ›  专栏  ›  技术社区  ›  clzola

具有自定义API Rest端点的WordPress和JWT

  •  3
  • clzola  · 技术社区  · 9 年前

    我需要为WordPress提供一个插件,该插件将有几个自定义API端点,我已经安装了这两个插件

    我已创建自定义端点:

    add_action('rest_api_init', function ($data) {
        register_rest_route('mladi-info/v1', '/user/favorites', [
            'methods' => 'GET',
            'callback' => 'mi_get_favorite_posts'
        ]);
    });
    

    我需要保护这个端点,以便只有那些发送了JWT令牌(使用/wp-json/JWT-auth/v1/token-endpoint-sending-username和password生成)的请求才能被处理,否则它应该返回401个状态代码。我该怎么做?

    2 回复  |  直到 9 年前
        1
  •  8
  •   shtrule    9 年前

    注册新路由时,应添加permission\u回调参数。

        add_action('rest_api_init', function ($data) {
            register_rest_route('mladi-info/v1', '/user/favorites', 
                array(
                    'methods' => 'GET',
                    'callback' => 'mi_get_favorite_posts',
                    'permission_callback' => function ($request) {
                            if (current_user_can('edit_others_posts'))
                            return true;
                     }
                 )
            );
        });
    

    JWT Auth plugin将根据头中的令牌值向permission\u回调函数提供用户对象,您所需要做的就是在该函数内计算出一些“权限逻辑”,它将返回bool值。

    在我发布的解决方案中,只有当访问REST端点的用户具有“编辑其他帖子”功能时,回调才允许访问REST端点,这对于管理员和编辑器来说就是如此。

        2
  •  0
  •   Mel Macaluso    5 年前

    add_action('rest_api_init', function ($data) {
        register_rest_route('jwt-auth', 'mladi-info/v1/user/favorites', [
            'methods' => 'GET',
            'callback' => 'mi_get_favorite_posts'
        ]);
    });
    

    然后,只需向该端点发送一个经过身份验证的请求,记住在头中使用/token端点(您发送用户名和密码以获取jwt令牌的端点)发送您获得的承载令牌。即。

    fetch('https://your-domain.com/wp-json/jwt-auth/mladi-info/v1/user/favorites', {
        method: 'GET'
        mode: 'cors',
        headers: {
          'Authorization': `Bearer ${jwt-token}`
        },
    });