本教程为《用WordPress与uni-app开发,包含所有源代码》系列教程之一。
全功能WordPress API接口工具已出
全功能WordPress API接口工具已出只为前端开发者的你设计,详情查看:Sliver Rest Wp api:全功能的WordPress api工具
前言
在上一小节(https://www.clearnull.com/942.html)中我们将jwt(也就是生成token的工具)拉到了本地,在本小节中我将带领大家按照我们需要的逻辑封装一个Token类。
本小节偏向于PHP后端,如果你看不懂可以跳过直接去git上下载本小节源代码。
开始
打开我们主题中的composer.json文件

加入如下代码:
"autoload": {
"psr-4": {
"SliverApi\": "sliver/"
}
}

然后我们在主题根目录下新建目录:sliver

之后我们在主题根目录下进入命令行:

执行命令:
composer install
命令执行完成之后我们在刚才创建的文件夹下面新建一个php文件:Token..php

实现Token方法:
在该文件中我们需要按照我们的逻辑实现两个方法,一个是生成token方法,另一个是解析token也就是校验token是否正确的方法。
代码如下:
<?php
namespace SliverApi;
use LcobucciJWTBuilder;
use LcobucciJWTSignerKey;
use LcobucciJWTSignerHmacSha256;
use LcobucciJWTValidationData;
use LcobucciJWTParser;
/**
* Token方法:https://www.clearnull.com/951.html
*/
class Token{
public function __construct(){
}
/**
* 生成Token
* @param [type] $uid [description]
* @param [type] $pwd [description]
*/
public static function setToken($uid,$pwd){
$time = time();
$issuedBy = get_home_url();//WordPress获取主页URL
$permittedFor = get_home_url();//WordPress获取主页URL
$pwd = md5($pwd);
$signer = new Sha256();
$token = (new Builder())->issuedBy($issuedBy) // 配置Token发行者一般为网站域名
->permittedFor($permittedFor) // 配置Token在什么地方可用一般为网站域名
->identifiedBy($pwd, true) //配置唯一签名值,此处使用WordPress加密过的用户密码,为了安全我们再MD5一次
->issuedAt($time) // 配置Token发行时间,这里为当前时间
->canOnlyBeUsedAfter($time) // 配置Token发行之后多长时间后可以使用,这里为立刻可以使用
->expiresAt($time + 36000) // 配置Token失效时间,这里为36000秒之后
->withClaim('uid', $uid) // 配置uid,这里为WordPress的user_id
->getToken($signer,new Key(APP_TOKENKEY));//APP_TOKENKEY是什么可以看这里:https://www.clearnull.com/942.html
return (string)$token;
}
/**
* 校验Token
*/
public static function checkToken($token,$pwd){
$signer = new Sha256();
$data = new ValidationData();
$issuedBy = get_home_url();
$permittedFor = get_home_url();
$data->setIssuer($issuedBy);
$data->setAudience($permittedFor);
try {
$token = (new Parser())->parse((string) $user_token);
} catch (LcobucciJWTException $e) {
$_data['code'] = 500;
$_data['msg'] = 'Token值非法';
return $_data;
}
$uid = $token->getClaim('uid');
$pwd = md5($pwd);//WordPress加密过的密码并且按照我们生成Token的逻辑再MD5一次
$if_auth = $token->verify($signer, APP_TOKENKEY);//APP_TOKENKEY是什么可以看这里:https://www.clearnull.com/942.html
if(!$if_auth){
$_data['code'] = 500;
$_data['msg'] = '登录失效,请重新登录';
return $_data;
}
$data->setId($pwd);
$if_auth = $token->validate($data);
if(!$if_auth){
$_data['code'] = 500;
$_data['msg'] = '登录失效,请重新登录';
return $_data;
}
//鉴权成功,使用WordPress方法返回用户数据
$_data['code'] = 200;
$_data['user_data'] = get_userdata($uid);
return $_data;
}
}
总结
至此Token就正式完成了,在下一小节中我将带领大家将我们的Token投入使用,并且修复Token代码中会出现的错误。
代码仓库:https://github.com/sliverRing/wpApp
QQ交流群: 824144151
技术援助
需要技术援助?点击这里,帮你解决你的所有问题!PS:可能你离大神之间,只差一个我们!!!!