0
点赞
收藏
分享

微信扫一扫

论fastadmin里面token加密方式


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 ​


举报

相关推荐

0 条评论