Laravel Hashids

距離我說要分享套件開始到現在也二年多了,靠這個騙了不少文章數,但是到目前也才分享完 JS 的部分,後面還有 PHP、Laravel 套件...我快沒耐心寫了😅,而且寫的過程中套件持續更新,真是拖越久越要重新做功課,幸好現在有 ChatGPT,寫部落格超好用👍。
Laravel Hashids 是基於 Hashids 衍生出來的 Laravel 套件,Hashids 是一個小型 library,可以根據數字產生簡短的唯一 ID。

在開發時應該會看過這樣的 URL:
https://example.com/user/1
https://example.com/user/2
https://example.com/user/3
流水號雖然非常直觀,但存在安全疑慮,只要把 /user/1 改成 /user/2,後端判斷又不夠嚴謹時,就可能存取到別人的資料。

透過 Hashids 套件,可以把流水號編碼成看不懂的字串,讓人無法根據流水號猜測網址。

一、安裝

使用 Composer 安裝。
composer require vinkla/hashids

二、設定

下指令 publish hashids 設定檔。
php artisan vendor:publish
會在 config 資料夾中建立 hashids.php 檔案。檔案中可以自訂新的 connections,才不會每次產出都是一樣的字串。
'default' => 'main',

'connections' => [

    'main' => [
        'salt' => '',
        'length' => 0,
        // 'alphabet' => 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
    ],

    'my-project' => [
        'salt' => 'your-salt-string',
        'length' => 'your-length-integer',
        // 'alphabet' => 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
    ],

],

三、使用

1. 基礎用法

使用上也非常簡單,基本上就是 encode、decode。
use Vinkla\Hashids\Facades\Hashids;

Hashids::encode($id);

Hashids::decode($hashId);
也可以搭配自訂的 connection。
use Vinkla\Hashids\Facades\Hashids;

Hashids::connection('my-project')->encode($id);

Hashids::connection('my-project')->decode($hashId);

2. 整合 Model

use Vinkla\Hashids\Facades\Hashids;

class User extends Model
{
    protected $appends = [
        'hashid'
    ];

    public function getHashidAttribute()
    {
        return Hashids::encode($this->id);
    }
}
參考文件

留言