承接 jiaxincui/hashid 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

jiaxincui/hashid

Composer 安装命令:

composer require jiaxincui/hashid

包简介

Laravel ID Encrypt Helper

README 文档

README

一个对Laravel应用模型ID进行对称加密的辅助函数。

依赖于hashids/hashids

只适用于正整数加密。

安装

$ composer require jiaxincui/hashid

配置

  1. 复制config/hashid.php文件到Laravel项目的config文件夹。
  2. 在.env文件添加配置项HASH_ID_ALPHABET=your-key
  • 为了Hash成更安全的字符串,请手动重新生成HASH_ID_ALPHABET,为0-9a-zA-Z共62个字符随机排序,字符不可重复,长度为16-62,可使用以下方法生成
echo str_shuffle('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');

简单使用

包含两个辅助方法id_encode()id_decode()。 在Laravel项目的任何地方均可使用这两个函数对ID进行加密或解密。

例子

echo id_encode(4568); //输出:N5lkv0
  
echo id_decode('N5lkvO'); //输出:4568
  
//不可对float类型数字加密,不可对负数加密,给定任何非正整数参数都会抛出错误,如:
echo id_encode(2.36); //非正整数,抛出错误
echo id_encode(-23); //非正整数,抛出错误
  
//解密时任何无效字符串参数或校验错误都会抛出错误, 如:
echo id_decode('m_Dl9'); //包含无效字符,抛出错误
echo id_decode('nlK8GhRW'); //校验错误,抛出错误

hashids/hashids不同的是hashids提供多个数字或包含多个数字的数组加密成一个字符串, 解密时以数组形式返回,这在实际应用中并不常见,反而给使用带来一定麻烦, 而此包对此进行了一些处理,不提供多个数字或多个数字数组的加密,解密时直接返回解密后的数字。

Laravel深度应用

加密

有2种方法实现自动加密

  • 如果模型主键为id

    通过Hashid提供的trait,在数据库模型中使用use Hashid;,对结果中的id字段自动加密成字符串,例如:

<?php
namespace App;
  
use Illuminate\Database\Eloquent\Model;
use Jiaxincui\Hashid\Traits\Hashid;
 
class User extends Model
{
    use Hashid;

}
  • 如果模型中的主键不是id

    你需要在模型中定义一个访问器,如你的主键为pid,在Model中添加访问器如下:

public function getPidAttribute($value)
{
  return id_encode($value);
}

解密

通过Hashid提供的middleware对路由参数解码,在控制器中无需做任何操作即可解码加密后的路由参数。 首先在App\Http\Kernel.php中注册中间件,在Kernel类的$routeMiddleware属性添加中间件条目。例如:

'hashid' => \Jiaxincui\Hashid\Http\Middleware\Hashid::class,

现在你可以在路由中分配中间件了。例如:

Route::resource('/users', 'UserController')->middleware('hashid');

中间件参数

默认情况下,Hashid中间件会解密当前路由的所有路由参数,如果你想指定被解密的路由参数可在中间件传入参数,例如:

Route::get('users/{user}/posts/{post}/comments/{comment}', function ($user, $post, $comment) {
    //
})->middleware('hashid:user,post');

以上例子中间件只解密给出的参数,如以上例子会解密路由参数userpost,不会解密commnent

现在你的应用已经具备完整的加密和解密模型ID的功能。

License

MIT © JiaxinCui

jiaxincui/hashid 适用场景与选型建议

jiaxincui/hashid 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 12.19k 次下载、GitHub Stars 达 24, 最近一次更新时间为 2017 年 09 月 19 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「helper」 「laravel」 「encrypt」 「hashid」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 jiaxincui/hashid 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 jiaxincui/hashid 我们能提供哪些服务?
定制开发 / 二次开发

基于 jiaxincui/hashid 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 12.19k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 24
  • 点击次数: 6
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 24
  • Watchers: 0
  • Forks: 4
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2017-09-19