当前位置: 首页 > 知识库问答 >
问题:

具有自定义API Restendpoint的WordPress和JWT

聂宜
2023-03-14

我需要为WordPress提供一个插件,该插件将具有很少的自定义APIendpoint,并且我已经安装了这两个插件

  • WordPress REST API V2
  • JWT-Auth

我已经创建自定义终端节点:

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

我需要保护这个endpoint,以便只有那些发送了JWT令牌的请求(通过发送用户名和密码 /wp-json/jwt-auth/v1/tokenendpoint生成)才能被处理,否则它应该返回401个状态码。我该怎么做?

共有2个答案

薛经纶
2023-03-14

在保护终结点时,使用 JWT-auth 插件的实际方法是在终结点前面加上正确的命名空间,然后发送一个 Bearer 标头令牌,以便可以成功访问资源。

你的情况是:

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}`
    },
});
宗冠宇
2023-03-14

当注册新路由时,您应该添加permission_callback参数。

    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插件将根据标头中的令牌值向permission_callback函数提供用户对象,您需要做的就是在该函数中找出一些“权限逻辑”,这将返回一个bool值。

在我发布的解决方案中,仅当访问 REST 终结点的用户具有“edit_others_posts”功能时,回调才允许访问 REST 终结点 - 管理员和编辑者就是这种情况。

 类似资料:
  • 我在Docker容器中运行Wordpress(以及PHPMyAdmin和MySQL),我需要进行更改以增加PHPMyAdmin的最大可上传文件大小 我研究了许多解决方案,发现了一个建议,创建一个定制的文件,然后将该文件包含在文件中。 所以我有这个: uploads.ini docker-compose.yml 我已将文件包含在中,用于 但是可悲的是,在运行并打开localhost:8080转到PH

  • 问题内容: 这是我的http服务器: 我需要在myHander内部访问实例t1。 有什么办法吗? 谢谢! 问题答案: 有一种方法可以将属性设置为class: 您必须注意,在所有使用myHandler的地方都将是t1的相同实例

  • 我已使用以下代码注册自定义邮件类型: 问题是,这篇文章的URL变成了: 但是,我需要: 有没有办法从URL中删除帖子类型的段塞“电影”,比如默认情况下在前端显示的帖子和页面? 谢谢

  • 我是WordPress的新手,我正在尝试将纯HTML主题转换为WordPress主题。但我有一个问题,我找不到解决办法。在nav菜单中,我找不到有选择地向WordPress作为菜单生成的和元素添加类的方法。 基本上,我需要为1个深度元素、2个深度元素和3个深度元素设置不同的类,还需要检查项目是否有子元素,然后还需要设置不同的类。 然后,我必须将onhtml脚本放在元素中(我知道这些是按钮,但我认为

  • 我创建了一个自定义超文本标记语言归档博客页面,我想在其中放置WordPress帖子。自定义页面有几个不同的布局,因此在帖子中循环只是重新生成我试图避免的整个页面。我想做的是循环通过每个帖子,然后将该帖子放在相关的档案中。 因此,第1列进入第1列第1列,第2列进入第2列第1列,第3列进入第2列第2列,第4列进入第2列第3列,以此类推。。。 如果这是不可能的,有没有一种方法,我可以有一个代码块,例如,

  • 我试图使用一个图像从一个wordpress帖子作为自定义标题背景图像。我目前有它设置为使用特色图像(这工作,但我不想使用特色图像) HTML(header.php) 我想在帖子中针对不同的图像。不管它是第一个,还是我用某种方式标记的一个。只要我能控制一个习惯。 我已经安装了ACF插件,正如另一个人提到的,但我不知道如何使用它来做我想做的事情 编辑: 我希望每一篇文章都有不同的标题图片