小程序使用wordpress的Rest API 、JWT 身份验证

本文由清尘发表于2019-01-22 23:36属于WordPress分类

官方文档:https://wordpress.org/plugins/jwt-authentication-for-wp-rest-api/

下面是在 WordPress 网站上使用 JWT 验证用户身份的主要流程。

申请 Token:用户使用自己在网站上注册的用户名与密码向网站申请 Token。
签发 Token:网站收到请求验证用户名与密码是否匹配,如果匹配,网站就给用户签发一个 JWT 的 Token。
使用 Token:用户收到网站签发的 Token,以后每次向网站发送请求的时候都可以带着这个 Token,网站接收请求,验证 Token 的有效性,并执行用户请求的行为。

一、在wordpress后台安装插件 JWT Authentication for WP-API

二、修改wp-config.php

your-top-secret-key是自己设置的字符串,用于签发token用的

define('JWT_AUTH_SECRET_KEY', 'your-top-secret-key');
define('JWT_AUTH_CORS_ENABLE', true);

启用PHP HTTP授权头
默认情况下,大多数共享主机都禁用了HTTP授权头。
要启用此选项,您需要编辑.htaccess文件并添加以下内容

# BEGIN WordPress

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
<IfModule mod_rewrite.c>
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]
</IfModule>

# END WordPress

配置完成后就可以通过POST方法发送正确的用户名和密码(json格式)签发token了。获取到token之后就可以存cookie或本地缓存里

/wp-json/jwt-auth/v1/token 
/wp-json/jwt-auth/v1/token/validate


比如在微信小程序里登陆获取token:

    wx.request({
      url:'http://www.url.com/wp-json/jwt-auth/v1/token',
      method:'POST',
      data:{
        username: name,
        password: pwd
      },
      success(res){
        var token = res.data.token;
      }
    })

使用API POST时都在header头带上这个token即可

例如在小程序里发布一篇文章

    wx.request({
      url:'http://www.url.com/wp-json/wp/v2/posts',
      method:'POST',
      header:{'Authorization':'Bearer' + token},
      data:{
        "title":'发布文章的标题',
        "content":"这是一篇通过REST接口发布的文章内容"
      }
    })

发送成功返回201