php设置令牌的方法

  介绍

这篇文章主要介绍php设置令牌的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

php设置令牌的方法:首先定义获取令牌的路由路径,然后建立服务层,接着在模型层里建立用户类,并在验证器类和异常类创建相应的验证方法和异常处理,最后完成牌令牌的编写即可。

我们开发的后端API接口会对访问者有一个权限要求,比如一些包含私人信息的接口,就需要访问者请求接口的同时,传递一个提前已经发放给访问者的令牌。

这就像一个令牌一样,只有访问者展示出来我们才会“通过放行”。

下面就记录一下权限令牌的代码编写思路。

<人力资源/> 一、流程概要
    <李>定义获取令牌的路由路径,接受代码参数(代码微信服务器,登录系统基于微信体系) <李>建立服务层,在这层里创建牌基类和UserToken类
      <李> UserToken类处理整个逻辑:令牌生成和返回李
    <李>在模型层里建立用户类,负责用户数据表的读写,供服务层的UserToken调用李 <>李在验证器类和异常类创建相应的验证方法和异常处理李 <>李控制器→服务层→模型层返回值给服务层→服务层返回值给控制器,整个流程完成牌令牌的编写
二,具体说明

首先定义好路由路径:

路线::post (& # 39; API/:版本/令牌/用户# 39;,& # 39;API/: version.Token/getToken& # 39;);复制代码

然后创建牌控制器,定义对应路由路径的getToken方法:

公共职能getToken($代码=& # 39;& # 39;){   (新TokenGet ())→goCheck($代码);//验证器牌=美元(新UserToken(代码)美元)→();返回(& # 39;标记# 39;=比;美元的令牌   ];   }复制代码

在调用服务层之前,还得检查一下传递过来的参数,于是定义TokenGet这个验证器:

类TokenGet BaseValidate延伸   {   保护规则美元=[& # 39;代码# 39;=比;& # 39;需要| isNotEmpty& # 39;   ];      保护美元消息=[& # 39;代码# 39;=比;& # 39;需要代码才能获得令牌! & # 39;   ];   }复制代码

回到令牌控制器,验证通过后,我们调用服务层定义的UserToken类:

$牌=(新UserToken(代码)美元)→();复制代码

这里讨论一下服务层和模型层。我们普遍的理解是服务层是基于模型层的一次抽象封装。

    <李>模型层只负责操作数据库并返且返回给服务层 <李>然后服务层处理业务逻辑,最后返回给控制器层

但我觉得小项目的话,服务其实和模型就有点平级的意思,因为有些简单的接口模型层直接对接控制器就可以了,只有相对复杂的接口,比如用户权限,就可以再经过服务层分隔不同功能的代码。

这样的处理更加灵活,有大量确实很简单的接口就不用过一次服务层了,这样更像是走过过场而已,没什么意义了。

回到服务层的代码编写,由于令牌还会有不同的种类,所以先创建一个象征性的基类,里面包含一些通用的方法,然后就是给访问者返回令牌的UserToken类的编写了。

由于是基于微信,我们需要三个信息:代码,appid, appsecret,然后通过构造函数来给UserToken类赋上初始值:

函数__construct(代码){=$ $ this→代码代码;$ this→wxAppID=配置(& # 39;wx.app_id& # 39;);$ this→wxAppSecret=配置(& # 39;wx.app_secret& # 39;);$ this→wxLoginUrl=sprintf (   配置(& # 39;wx.login_url& # 39;), $ this→wxAppID, $ this→wxAppSecret, $ this→代码   );   }复制代码

然后把这三个放入微信提供的接口的参数位置,目的是获得一个完整的微信服务器端的url,请求到我们需要的openid。

然后是通过发送网络请求的步骤就在此略过。微信服务器会返回包含openid的对象,判断这个对象的值没问题后,我们就开始生成令牌的步骤了,创建函数grantToken ():

私有函数grantToken (openidObj美元){//取出openid openid=openidObj美元[& # 39;openid # 39;];//通过模型层调用数据库,检查openid是否已经存在$ user=UserModel:: getByOpenID ($ openid);//如果存在,不处理,反之则新增一条用户记录如果($ user) {uid=用户→美元id;   其他}{//不存在,生成一条数据,具体方法略过uid=美元这→分类列出($ openid);   }//生成令牌,写入缓存(具体方法见下面的定义)$ cachedValue=https://www.yisu.com/zixun/$ this -> prepareCacheValue (openidObj, uid美元);令牌=$ this -> saveToCache美元($ cachedValue);//令牌返回到调用者端返回$令牌;   }      私有函数prepareCacheValue (openidObj美元,美元uid) {cachedValue=openidObj美元;$ cachedValue [“uid”]=uid美元;美元cachedValue(“范围”)=16;//权限值,自己定义返回cachedValue美元;   }      私有函数saveToCache (cachedValue美元){$关键=self:: generateToken ();//生成令牌的方法美元价值=json_encode (cachedValue美元);$ tokenExpire=配置(“setting.token_expire”);//设定的过期时间$请求=缓存(键,值,美元tokenExpire美元);如果(! $请求){   把新TokenException([“味精”=>“服务器缓存异常”,“错误代码”=> 10005   ]);   美元}返回键;//返回令牌,令牌   }复制代码

php设置令牌的方法