如何在 Laravel 5.2 中加密 url 中的所有 id

问题描述 投票:0回答:3

我需要对所有 url id 进行加密,如下所示:

user/edit/1
items/edit/35
posts/details/52

user/edit/sdfjk54dfds
items/edit/sdfjk54dfds
posts/details/sdfjk5s4dfds

有很多像

blade
文件这样的区域,在
controllers
中,id 使用了
url('items/edit/2')
,并且在控制器中,一些函数是由像
public function itemedit(Items $items)
这样的对象传递的。

我尝试了

$encrypt_val = Crypt::encrypt($value)
$decrypt_val = Crypt::decrypt($encrypt_val );
,但我需要在任何地方都这样做。

有什么捷径或中间件功能可以做到这一点吗?

php encryption laravel-5 url-encoding
3个回答
2
投票

使用 Laravel Hashids

您可以像下面这样对 id 进行编码

$encoded_id = Hashids::encode($id);

您的网址将如下所示

<url>/users/edit/sdfjk54dfds

哈希ID安装指南 https://github.com/vinkla/laravel-hashids


1
投票

您可以使用

Uuid
而不是使用整数
id
。为此,请按照说明进行操作:

只需创建一个

trait
:

trait Uuids
{
    /**
     * Boot function from laravel.
     */
    protected static function boot()
    {
        parent::boot();
        static::creating(function ($model) {
            $model->{$model->getKeyName()} = Uuid::generate()->string;
        });
    }
}

并在您的模型中使用上述特征:

use SomeNamespcaeOfTrait;

class User extends Eloquent
 {
    use Uuids;

    /**
     * @var bool
     */
    public $incrementing = false;
}

并在迁移中使用

uuid
而不是
integer


0
投票

有一个名为 Laravel HashSlug 的包可以按照需要运行。与 sumit 的答案类似,它是基于 Hashids 构建的,但专门设计用于处理 url。

使用上面的包,您需要做的就是在控制器中添加特征和类型提示:

class Post extends Model {
    use HasHashSlug;
}
// routes/web.php
Route::resource('/posts', 'PostController');
// app/Http/Controllers/PostController.php

public function show(Post $post){
  return view('post.show', compact('post'));
}
© www.soinside.com 2019 - 2024. All rights reserved.