加密路由器URL中的ID?

时间:2017-10-29 10:45:34

标签: laravel laravel-5

我有像

这样的控制器

记录,项目....我使用ID的地方 / records / 1,/ records / 2 .... / items / 1,/ items / 2 .... 提示可以接收所有控制器(记录,项目...)的密码类型/记录/ H $ Ur95%92(任何哈希)的最佳变体。第一个选项是创建一个设置为id< - >的表格。哈希并检查路由器中传输的哈希值。但我认为这个选项不太正确,因为在添加新记录(ID)时,您需要记录(检查)新哈希。我认为有一个简单的选择,通过路由器很好地完成所有这些,没有任何额外的表。 喜欢这个

$id= Crypt::encrypt(['id' => 1 ]);
<a href="{{url('/records/',$id)}}" target="_blank">get record</a>

然后检查路由器,如

Route::get('/{id}', function($id){
 ..... Crypt::decrypt($id);............
});

也许找到任何其他方式,我们有所有控制器的全局规则,只在路由器区域加密和解密ID(没有任何guid / uuid)。

1 个答案:

答案 0 :(得分:1)

就像@haidang提到的那样,你可以使用Vinkla的Hashids(https://github.com/vinkla/laravel-hashids)包。

实施步骤

安装

composer require vinkla/hashids

如果您正在运行laravel 5.5+,那么将自动发现该包。否则,请将服务提供商添加到 config / app.php 文件

服务提供商(适用于Laravel 5.4及更低版本)

将服务提供者添加到providers数组中的config / app.php,或者如果您使用的是Laravel 5.5,则可以通过自动包发现来完成。

Vinkla\Hashids\HashidsServiceProvider::class

如果你想要,你可以使用立面。将config / app.php中的引用添加到别名数组中。

'Hashids' => Vinkla\Hashids\Facades\Hashids::class

然后

php artisan vendor:publish

用法

// You can alias this in config/app.php.
use Vinkla\Hashids\Facades\Hashids;

Hashids::encode(4815162342);

Hashids::decode('doyouthinkthatsairyourebreathingnow');
// This example is simple and there are far more methods available.