隐藏你的 ID 吧!
hyid
hidden your id. 隐藏你的ID.
使用场景
当我们的应用需要提供一个无状态通过ID获取信息的接口,例如 GET /user/{id} ,此类接口只要递增ID进行请求,就可以得到我们数据库中所有公开信息,这很显然不是我们想看到的。hyid 可以帮助你隐藏我们不希望用户看到的ID字段,或者其他数字字段。
安装
composer require 96qbhy/hyid
laravel or lumen
- 注册服务提供者 :
Qbhy\Hyid\ServiceProvider::class - 发布配置文件(lumen可以自行复制
config/hyid.php或者安装vendor:publish命令):php artisan vendor:publish --provider=Qbhy\Hyid\ServiceProvider
使用
class User extends Model{
use Qbhy\Hyid\HyidAble;
// or
public function getUserId($userId){
return hyid($userId);
}
// or
public function toArray(){
$data = parent::toArray();
$data['id'] = hyid()->encode($data['id'])
return $data;
}
}
// decode
public function userinfo($id){
return User::query()->findOrFail(hyid()->decode($id))->toArray();
}
// 非 laravel or lumen 下,可以自行实例化 Hyid 类
$secret = 'qbhy';
$offset = 1996;
$randomLength = 6;
$hyid = new Hyid($secret,$offset,$randomLength);
$encodedId = $hyid->encode(1);
$id = $hyid->decode($encodedId);
96qbhy@gmail.com
qbhy/hyid
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 7年前 自动加精
关于 LearnKu
该方法可以很好的隐藏数据库内原始 ID 值,防止不法分子利用接口恶意获取数据。
我是直接将模型的 routeKey 改成了 username.
@overtrue username 加唯一索引确实可以的,但是数据大了还是 ID 比较好。
和hashid一样吧
@fun206 看了下hashids,功能好像确实是差不多
用的是 base64_encode,当 id 数值很大的时候, encode 的值也很长一串,不支持固定长度的 encode 啊
ID直接用 uuid
楼主也太大意了,
composer require 96qbhy/hyid这也写错了,我说怎么安装不了@godruoyi 固定长度理论上是不可逆的,因为密文数量有限,而原文数量无限,存在一个密文多个原文的可能
@lovecn 谢谢提醒
@Janpun 嗯,还有改进的空间
在使用了
laravel-ide-helper进行php artisan ide-helper:meta的时候报错了。@MrCong 配置没问题吗?
must be of the type string, null given。这个错误的意思是你传了错误的参数类型,看看 env 有没有添加HYID_SECRET和HYID_OFFSETbase64?
个人建议直接用uuid