- 介绍
- 用户注册、找回密码
- 授权认证
介绍
官网:http://v2.wp-api.org/
4.4版本开始支持rest-api,以插件形式存在,4.7版本后系统内置。
多数情况下使用rest-api,是将WordPress为第三方授权认证可用,其实也完全可以将WordPress作为接口服务器,适用于各类SPA产品。
用户注册、找回密码
WordPress使用特有认证系统,即时安装JWT类认证插件也无法创建新用户,推荐安装WP REST User
插件来完成用户注册、找回密码。
插件官方地址:
https://wordpress.org/plugins/wp-rest-user/
1.用户注册
/wp-json/wp/v2/users/register
JSON参数(设置头: content-type: application/json):
{
"username": "new-user",
"email": "[email protected]",
"password": "123456",
}
(可选)要在用户注册后执行进一步操作,添加钩子:
add_action('wp_rest_user_user_register', 'user_registered');
function user_registered($user) {
// 执行操作
}
这个插件只允许注册用户为“订阅者”或“贡献者”角色,比较安全无害。如果有需要,这里就可将注册用户身份设置为作者:
$user->set_role('author');
2.找回密码
/wp-json/wp/v2/users/lost-password
JSON参数(设置头:content-type: application/json):
{
"user_login": "[email protected]"
}
user_login
可以是用户名或电子邮件。
授权认证
官方认证推荐OAuth 1.0a Server
, Application Passwords
, 和 JSON Web Tokens
。
https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/
JWT插件地址:
https://wordpress.org/plugins/jwt-authentication-for-wp-rest-api/
1. 启用PHP HTTP授权头
编辑.htaccess文件添加:
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
2. 配置密钥和开关
wp-config.php
中添加:
define('JWT_AUTH_SECRET_KEY', 'your-top-secret-key');
define('JWT_AUTH_CORS_ENABLE', true);
当插件被激活时,一个新的命名空间被添加:
/jwt-auth/v1
/wp-json/jwt-auth/v1/token | POST
/wp-json/jwt-auth/v1/token/validate | POST
3.请求token
let TOKEN = '';
let reqUrl = 'http://xxxxx.com/wp-json/jwt-auth/v1/token';
axios.post(reqUrl, {
'username': 'jerry',
'email': '[email protected]',
'password': '123456'
})
.then(function(response) {
console.log(response);
TOKEN = response.data.token;
})
.catch(function(error) {
console.log(error);
});
获取到token之后存cookie或localstorage中。
4.请求接口
每次POST请求时都在header头带上token:
let reqUrl = 'http://xxxxx.com/wp-json/wp/v2/posts';
let headers = { 'Authorization': 'Bearer' + TOKEN };
axios.post(reqUrl, {
'title': '测试',
'content': '测试文章内容',
}, {
headers: headers
})
.then(function(response) {
console.log(response);
})
.catch(function(error) {
console.log(error);
});
附:
WordPress默认用户角色和权限:
https://gist.github.com/octalmage/d748456cfd48db849207
WordPress用户角色和权限完整版:
https://codex.wordpress.org/User_Levels#User_Level_2