首先我们先准备一个用户表user,表字段如下
众所周知,要做小程序登录,就需要使用小程序的wx.login,然后把获取到的code码传到后台,然后后台接收code码来换取openid,得到token,下面就让我们来看看怎么实现的
首先是在模块里,建立了一个server文件夹,里面建立了一个token文件,使用JWT
然后是代码
<?php
namespace app\api\server;
use app\Request;
use Firebase\JWT\JWT;
class Token
{
protected $salt;
public function __construct()
{
$this->salt = config('jwt.salt');
}
/**
* 生成token
* @param $uid
* @return mixed
*/
function generateToken($uid)
{
//获取当前时间戳
$currentTime = time();
$data = array(
"iss" => 'keZuo', //签发者 可以为空
"aud" => '', //面象的用户,可以为空
"iat" => $currentTime, //签发时间
"nbf" => $currentTime, //立马生效
"exp" => $currentTime + 7200, //token 过期时间 两小时
"data" => [ //记录的userid的信息,这里是自已添加上去的,如果有其它信息,可以再添加数组的键值对
'uid' => $uid,
]
);
//生成token
$token = JWT::encode($data, $this->salt, "HS256"); //根据参数生成了 token
return $token;
}
/**
* 校验token时效性
*/
public function chekToken($token)
{
$status=array("code"=>2);
try {
JWT::$leeway = 60;//当前时间减去60,把时间留点余地
$decoded = JWT::decode($token, $this->salt, array('HS256')); //HS256方式,这里要和签发的时候对应
$arr = (array)$decoded;
$res['code']=1;
$res['data']=$arr['data'];
return $res;
} catch(\Firebase\JWT\SignatureInvalidEx