fastadmin里面token加密方式知识分享
1.首先随机生成一个唯一的token
php复制代码/**
* 获取全球唯一标识
* @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.下面是加密
php复制代码// 加密方式
echo " hash_hmac(加密方式, 加密字段, 缓存前缀)";
echo hash_hmac("ripemd160", "asdasd-asdasd-sadasd-asdsa", "i3d6o32wo8fvs1fvdpwens");die;
3.加密后存入数据库或者缓存,
4.加密后 获取数据库或者缓存中对应的用户id和用户信息
token类的基本功能
自动初始化Token
判断Token
读取Token
设置token
删除Token
更新token
获取token用户信息
验证token的基本功能 、除去以上功能外
模拟他人账号
多账号认证体系
检查用户权限
获取用户权限菜单
下面我们讲一下类库
jwt模式是前后端分类趋势下生成的新的验证机制,JSON Web Token
存redis的一般方法,
php复制代码 /**
* 存储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复制代码<?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)
{
}
}