WordPress RESTful API 的授权方式
像素鱼丸
2023-07-09
1580

WordPress 5.6 以后内置了RESTful API,并且建议用户一定不要关闭,否则会影响WordPress后台的某些功能。调用某些接口的时候,会提示

{code: "rest_cannot_edit", message: "抱歉,您不能编辑此用户。", data: {status: 401}}

Cookie Authentication 是 WordPress 内置的身份验证方法。登录仪表板时,会生成cookie。 但是,REST API包含一种称为nonce的技术来避免CSRF的问题。

使用内置Javascript API的开发人员,WordPress 会自动处理 nonce。自定义数据模型可以扩展wp.api.models.Base 确保为任何自定义请求正确发送。

对于自己启用 Ajax的情况,需要在请求的地址后面,加上一个 nonce 参数“_wpnonce”。可以使用 wp_create_nonce(‘wp_rest’) 生成 _wpnonce。举个例子:

http://www.vtheme.cn/wp-json/wp/v2/users/2?_wpnonce=9aaea876fd

axios 例子:

var wpnonce = document.querySelector("input[name='wp_create_nonce']").value;
var url = document.querySelector(".ajax-form").getAttribute("action") + "?_wpnonce=" + wpnonce;
var userId = document.querySelector("input[name='id']").value;
var formData = new FormData();
formData.append('id', userId);
formData.append('nickname', '木瓜');

axios({
    headers: { 'Content-Type': 'multipart/form-data' },
    method: 'post',
    url: url,
    responseType: 'json',
    data: formData,
})
    .then(function (response) {
        console.log("response: ", response);
    })
    .catch(function (error) {
        console.log("error:", JSON.stringify(error) );
    });

除了这个,还有两种方式 处理接口权限的问题,推荐使用类似第三种 JSON Web Token.


Application Passwords

WordPress 5.6 以前是个插件,现在已经集成到WordPress中了。

functions.php 中添加 add_filter( ‘wp_is_application_passwords_available’, ‘__return_true’ ); 进行开启。然后在控制面板->所有用户->编辑用户中,即出现应用程序密码设置。或者使用基于 Cookie Authentication 的方法创建,相关接口参看:https://wordpress.org/plugins/application-passwords/

应用程序密码允许通过非交互式系统(例如XML-RPC或REST API)进行身份验证,而无需提供您的实际密码。应用密码很容易被撤销。它们不能用于通过传统方式登录您的网站。

 


JSON Web Tokens

插件地址: http://wordpress.org/plugins/jwt-authentication-for-wp-rest-api/

VScode RESTclinet 例子:

###
POST http://www.vtheme.cn/wp-json/jwt-auth/v1/token
content-type: application/json

{
    "username": "test",
    "password": "123123"
}

###
GET http://www.vtheme.cn/wp-json/wp/v2/users/me/application-passwords
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1LKJ9.eyJpc3MiOiJodHRwOlwvXC93d3cudmVyeXRoZW1lLmGJKSIsImlhdCI6MTYyNTg1NTU4NSwibmJmIjoxNjI1ODU1NTg1LCJleHAiOjE2MjY0NjAzODUsImRhdGEiOnsidXNlciI6eyJpZCI6IjEifX19.vgfz24DIDFddML3m4OplbJgvWcmCsktSdf14_Jhjkhjk

 

参考:http://developer.wordpress.org/rest-api/using-the-rest-api/authentication/

收藏
打赏
WordPress 自定义文章排序
上一篇
WordPress 调用自定义头像
下一篇

发表评论

注册不是必须的

像素鱼丸
158 文章
2 评论
4 喜欢
最新文章

什么是幽灵按钮

“幽灵按钮”(Ghost Button)是一种常见的网页与移动应用 UI 设计模式,指背景透明(或半透明)、仅通过边框(border)和文字(text)定义的按钮,视觉上“若隐若现”,仿佛“幽灵”一般——因此得名。 核心特征: 无填充色(transparent background) 背景完全透明(或与父容器同色),不遮挡背后内容。 清晰的边框(通常 1–2px 实线) 如 border: 2px […]

付费资源下载时间限制有什么用?

这个功能确实挺常见的,它背后的逻辑其实不是“防君子”,而是“防小人”和“控成本”。有没有必要做,主要取决于你平台上的资源类型和你的运营阶段。 我们可以从三个角度来看看这个“10天有效期”到底有什么用: 增加倒卖和二次传播的成本(防黄牛) 这是最核心的意义。如果你的资源是虚拟商品(比如教程、源码、素材包),用户付一次钱理论上可以无限复制。 如果没有有效期: 一个人买了,转手挂到闲鱼或者别的群里卖,你 […]

测试产品

退款和取消订单接口要不要合并

很多开发者在设计初期的常见思路。将“取消”和“退款”分开,从功能上看似乎很清晰,但在实际的复杂业务场景中,这种设计可能会带来一些问题。 更主流和推荐的设计是提供一个统一的“申请取消订单”接口,由后端服务根据订单的当前状态,自动路由到不同的处理逻辑。  为什么统一接口是更好的选择? 前端逻辑简化: 对于用户而言,他的诉求只有一个:“我不想要这个订单了”。无论订单是否支付,他在前端点击的都是“取消订单 […]
生成中...
扫描二维码
扫描二维码
确认购买

您确定要购买此资源吗?

微信扫码支付

请使用微信扫描二维码完成支付

订单号:

等待支付...