封装完成后的jwt 生成token及获取token的信息(tp5.1 本地版 wamp64位 php5.6.31, apache2.4.27, mysql5.7.19)

 1.  MyJwtAuth.php内容如下

<?php
/**
 * @Author: Marte
 * @Date:   2019-04-23 14:35:34
 * @Last Modified by:   Marte
 * @Last Modified time: 2019-04-23 16:09:57
 */
namespace app\common\auth;
// 引入jwt
use think\JWT;
class MyJwtAuth{

    private $token;
    private $uid;
    private $key = 'yang'; //自定义的key值

    /**
     * 单例模式0 JwtAuth句柄
     * @var [type]
     */
    private static $instance;
    private function __construct()
    {

    }

    public static function getInstance()
    {
        if (is_null(self::$instance)) {
            self::$instance = new self();
        }
        return self::$instance;
    }


    //阻止用户复制对象实例
    private function __clone()
    {
        trigger_error('禁止克隆' ,E_USER_ERROR);
    }

    /**
     * 获取token
     * @return [type] [description]
     */
    public function getToken(){
        return (string)$this->token;
    }

    /**
     * 设置token
     * @param [type] $token [description]
     */
    public function setToken($token){
        $this->token  =  $token;
        return $this;
    }

    /**
     * 获取uid
     * @return [type] [description]
     */
    public function getUid(){
        return (string)$this->uid;
    }

    /**
     * 设置uid
     * @param [type] $token [description]
     */
    public function setUid($uid){
        $this->uid  =  $uid;
        return $this;
    }

    /**
     * 编写生成token方法
     * @return [type] [description]
     */
    public function getJwtToken(){
    
        $jwtData = [
            "iss" => '',  //签发者 可以为空
            "aud" => '', //面象的用户,可以为空
            "lat" => time(), //签发时间
            "nbf" => time()+10, //在什么时候jwt开始生效  (这里表示生成10秒后才生效)
            "exp" => time()+3600, //token 过期时间 (表示1小时后过期)
            "uid" => $this->uid, //记录的uid的信息,如果有其它信息,可以再添加数组的键值对
            // 'mobile' => $mobile,
        ];
        $this->token = JWT::encode($jwtData, $this->key);
        return $this;
    }

     /**
     * 验证token  获取信息方法
     * @param  [type] $token [description]
     * @return [type]        [description]
     */
    public function checkJwtToken($token)
    {
        $info = JWT::decode($token, $this->key,['HS256']);
        return json_encode($info);
    }


}

2. User.php 控制器中调用方法如下:

<?php
/**
 * @Author: Marte
 * @Date:   2019-04-22 18:39:45
 * @Last Modified by:   Marte
 * @Last Modified time: 2019-04-23 16:18:43
 */
namespace app\index\controller;
use app\index\model\User as Users;
use app\common\auth\MyJwtAuth;
use app\index\controller\ResponseJson;
use think\Controller;

// 引入jwt
use think\JWT;

class User extends controller
{
    use ResponseJson;

    public function login(){
        //从客户端获取的登录参数
        $email = '123456789@qq.com';
        $password = '123456';

        // echo password_hash('123456',PASSWORD_DEFAULT);密码和散列值匹配
        // die;
        $re = Users::where('email',$email)->find();
        if(!$re){
            echo '用户不存在';die;
        }
        // password_verify — 验证密码是否和散列值匹配
        $userPasswordHash = $re['password'];
        if (!password_verify($password,$userPasswordHash)) {
            echo '密码错误';die;
        }

        /**
         * 调用MyJwtAuth类下的getJwtToken(用户id)方法 获取token
         * @var [type]
         */
        $jwtAuth = MyJwtAuth::getInstance(); // 调用单例句柄
        $token = $jwtAuth->setUid($re['id'])->getJwtToken()->getToken(); // 链式操作

        return $this->jsonSuccessData([
                'token' => $token,
        ]);
    }

    // 客户端获取用户信息接口
    public function getUser($token=[]){
        if(!$token){
            echo '请传入token';die;
        }
        $jwtAuth = MyJwtAuth::getInstance(); // 调用单例句柄
        $info = $jwtAuth->checkJwtToken($token);

        $in = json_decode($info,true);
        $user = Users::where('id',$in['uid'])->find();
        return $this->jsonSuccessData([
            'email' => $user['email'],
            'name' => $user['name'],
        ]);
    }

    



}

 3. ResponseJson.php 如下:

<?php
namespace app\index\controller;
trait ResponseJson
{

    // 当接口出现异常时的返回
    public function jsonData($code,$message,$data = [])
    {
        return $this->jsonResponse($code,$message,$data);
    }

    // app接口请求成功的返回
    public function jsonSuccessData($data = [])
    {
        return $this->jsonResponse(0,'success',$data);
    }

    // 返回一个json
	private function jsonResponse($code,$message,$data = [])
	{
		$content = [
			'code'=>$code,
			'message'=>$message,
			'data'=>$data,
		];
		return json_encode($content);
	}

}

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值