封装Token类

在上一小节中我们将jwt(也就是生成token的工具)拉到了本地,在本小节中我将带领大家按照我们需要的逻辑封装一个Token类。

本教程为《用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:可能你离大神之间,只差一个我们!!!!

给TA打赏
共{{data.count}}人
人已打赏
混合app

实现Token第二步

2020-6-29 11:43:46

混合app

uni-app实现用户是否登录的判断

2020-7-1 8:56:10

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索