论fastadmin里面token加密方式

598 阅读2分钟

1.首先随机生成一个唯一的token

/**
     * 获取全球唯一标识
     * @return string
     */
  function uuid()
    {
        return sprintf(
            '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
            mt_rand(0, 0xffff),
            mt_rand(0, 0xffff),
            mt_rand(0, 0xffff),
            mt_rand(0, 0x0fff) | 0x4000,
            mt_rand(0, 0x3fff) | 0x8000,
            mt_rand(0, 0xffff),
            mt_rand(0, 0xffff),
            mt_rand(0, 0xffff)
        );
    }
    echo  uuid();

2.下面是加密

// 加密方式
echo " hash_hmac(加密方式, 加密字段, 缓存前缀)";
echo hash_hmac("ripemd160", "asdasd-asdasd-sadasd-asdsa", "i3d6o32wo8fvs1fvdpwens");die;

3.加密后存入数据库或者缓存,

4.加密后 获取数据库或者缓存中对应的用户id和用户信息

token类的基本功能

  1. 自动初始化Token
  2. 判断Token
  3. 读取Token
  4. 设置token
  5. 删除Token
  6. 更新token
  7. 获取token用户信息

验证token的基本功能 、除去以上功能外

模拟他人账号
多账号认证体系
检查用户权限
获取用户权限菜单

下面我们讲一下类库

jwt模式是前后端分类趋势下生成的新的验证机制,JSON Web Token

存redis的一般方法,

 /**
     * 存储Token
     * @param   string $token   Token
     * @param   int    $user_id 会员ID
     * @param   int    $expire  过期时长,0表示无限,单位秒
     * @return bool
     */
    public function set($token, $user_id, $expire = 0)
    {
        //过期时间
        if (is_null($expire)) {
            $expire = $this->options['expire'];
        }
        if ($expire instanceof \DateTime) {
            $expire = $expire->getTimestamp() - time();
        }
        //获取加密后的Token
        $key = $this->getEncryptedToken($token);
        
        // Redis 字符串(string)
        if ($expire) {
            $result = $this->handler->setex($key, $expire, $user_id);
        } else {
            $result = $this->handler->set($key, $user_id);
        }
        //写入会员关联的token Redis Sadd 命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。
        $this->handler->sAdd($this->getUserKey($user_id), $key);
        return $result;
    }

token类的基本方法是

初始化类库(获取token配置、根据配置参数引用不同的驱动,连接Token驱动)
生成token
设置token(绑定token和user_id,设置的缓存、文件、甚至是数据库)
获取token(获取token和用户id)
验证token是否可用(验证是否存在、验证是否过期,重置过期时间)
根据token清除token
根据user_id清除token
获取过期剩余时长

<?php
 
class token  
{ 
       /**
     * 自动初始化Token
     * @access public
     * @param  array $options 配置数组
     * @return Driver
     */
    public static  function init(array $options = [])
    {
 		//首先链接不同的token储存驱动(mysql、redis等)
    } 
     /**
     * 获取全球唯一标识
     * @return string
     */
    public static function uuid()
    {
    }
     /**
     * 加密token
     * @return string
     */

    public static function hash_uuid($uuid)
    {  
    }
     /**
     * 判断Token是否可用
     * @param string $token Token标识
     * @return bool
     */
    public static function check($token, $user_id)
    {
         
        
    }
      /**
     * 读取Token
     * @access public
     * @param  string $token   Token标识
     * @param  mixed  $default 默认值
     * @return mixed
     */
    public static function get($token, $default = false)
    { 
         
    }
 
    /**
     * 写入Token
     * @access public
     * @param  string   $token   Token标识
     * @param  mixed    $user_id 存储数据
     * @param  int|null $expire  有效时间 0为永久
     * @return boolean
     */
    public static function set($token, $user_id, $expire = null)
    {  
    }

 

    /**
     * 删除Token
     * @param string $token 标签名
     * @return bool
     */
    public static function delete($token)
    {  
    }

    /**
     * 清除Token
     * @access public
     * @param  int user_id 用户编号
     * @return boolean
     */
    public static function clear($user_id = null)
    {  
    }
 
   
}

\


程序员交流qq群:782974737 点击加入