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

时间:2017-01-26 08:17:22

标签: php encryption laravel-5 laravel-5.2 url-encoding

我需要像以下一样加密所有网址:

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 );,但我需要在任何地方都这样做。

有任何简短的方法或中间件功能吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

  

使用Laravel Hashids

您可以对ID进行编码,如下所示

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

您的网址如下所示

<url>/users/edit/sdfjk54dfds

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

答案 2 :(得分:0)

有一个名为Laravel HashSlug的程序包可以根据需要运行。与sumit的答案类似,它基于Hashids,但专门设计用于网址。

使用上述软件包,您只需在控制器中添加特征和类型提示:

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'));
}