混合app

封装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

此为本站官方星球,加入此星球可以获得以下专属权利:

  1. 得到官方任何WordPress方面的问题解答(包括WordPress建站疑问、WordPress使用问题、WordPress主题或插件bug)
  2. 可以随意下载以及更新官方发布的插件、主题(如有特别说明除外)
  3. 可以得到官方人员的免费技术援助(包括但不仅限于:WordPress、UNI、IONIC、React Native 、flutter、建站)
  4. 可以查看所有官方插件、主题的使用文档
  5. 可以得到官方插件、模板的免费技术援助
  6. 免费查看官网推出的所有教程并得到技术援助
  7. 免费得到WordPress建站建议、优化建议(大数据,大存储,高并发)
  8. 更多权利待添加……

评论已经被关闭。

插入图片

推荐文章

  1. 抱歉,没有找到文章!

WordPressApp来了

快速让你的网站变成一个APP,不需要任何技术,点此查看