WordPress rest-api 用户注册、找回密码和授权认证完整总结

  1. 介绍
  2. 用户注册、找回密码
  3. 授权认证

介绍

官网: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

你可能感兴趣的:(WordPress rest-api 用户注册、找回密码和授权认证完整总结)