TP5.1食用JWT

发布于 2019-06-11  70 次阅读


TP5.1食用JWT

准备工作

项目的创建

这个可以用laragon的快速创建去创建一个项目

创建数据表

在TP的官文中有个叫做数据库迁移的工具我们可以利用它创建数据表
在此之前你应该配置好tp的数据库

数据库迁移工具

数据库迁移工具
我们要用它创建数据表
首先安装它

composer require topthink/think-migration=2.0.*

如果你用的是laragon就自带了composer
注意要在项目目录运行此命令

创建用户表

php think migrate:create Users


然后我们去编写我们的数据库迁移类
\database\migrations\xxxxxxxxxx_users.php

<?php

use think\migration\Migrator;
use think\migration\db\Column;

class Users extends Migrator
{
    public function change()
    {
        // create the table
        $table = $this->table('users',array('engine'=>'MyISAM'));
        $table->addColumn('username', 'string',array('limit' => 15,'default'=>'','comment'=>'用户名,登陆使用'))
            ->addColumn('password', 'string',array('limit' => 32,'null' => false,'comment'=>'用户密码'))
            ->addColumn('introduction','text',array('comment'=>'用户介绍'))
            ->addIndex(array('username'), array('unique' => true))
            ->create();
    }
    public function down()
    {
        $this->table('users')->drop()->save();
    }
}

执行数据库迁移命令

php think migrate:run



这样子就创建完成用户表啦!

composer安装jwt

jwt项目地址

composer require lcobucci/jwt

创建JWTTOKEN类

像自己封装的东西我们可以新建一个文件夹

这里我在application下新建了一个handlers放自己封装的东西
并新建了一个Jwt文件编写我们jwt的业务逻辑
现在我们编写代码

<?php

namespace app\handlers;

use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Parser;
use Lcobucci\JWT\ValidationData;
use Lcobucci\JWT\Signer\Hmac\Sha256;
use think\facade\Env;

class Jwt
{
    private $salt;
    private $expire;
    public function __construct()
    {
        $this->salt = Env::get('jwt_salt','default');
        $this->expire = Env::get('jwt_expire',3600);
    }
     /**
     * 创建JWTToken
     * @param int $sub 需要保存的用户身份标识
     * @return Builder
     **/
    public function create($sub = null)
    {
        $signer = new Sha256();
        $currentTime = time();
        $token = new Builder();
        //jwt签发人 填写自己的域名
        $token->setIssuer("http://jwtdemo.test");
        // $token->setAudience("");
        //签发时间
        $token->setIssuedAt($currentTime);
        $token->setExpiration($currentTime + $this->expire);
        //设置用户id
        $token->withClaim('sub', $sub);
        //加密数据
        $token->sign($signer, $this->salt);
       return $token;
    }
    /**
     * 验证token
     * @param string $token 需验证的jwt
     * @return Boolean
     */
    public function validation($token = null)
    {
        $token = (new Parser())->parse((String)$token);
        $signer = new Sha256();
        if (!$token->verify($signer, $this->salt))
            return false;
        $validationData = new ValidationData();
        $validationData->setIssuer('http://jwtdemo.test');
        return $token->validate($validationData);
    }
}

记得新建一个.env文件 在项目目录下


更多配置请参考文档

下一篇就写一下Api用户登录 使用上我们封装的Jwt


还是好热爱web开发