hotrush/laravel-signer

用于为 Laravel 模型创建和验证签名的包。

1.1.0 2023-03-01 10:57 UTC

This package is auto-updated.

Last update: 2024-08-29 14:24:20 UTC


README

Latest Version on Packagist Total Downloads Tests and coverage Maintainability Test Coverage

Laravel Signer

用于为 Laravel 模型创建和验证签名的包。

安装

composer require hotrush/laravel-signer

用法

  1. Signable 接口添加到您的模型中

    use Hotrush\Signer\Contracts\Signable;
    
    class Post extends Model implements Signable
    {
    
    }
  2. 实现接口方法。为了简化此过程,可以使用 CanBeSigned 特性。

    use Hotrush\Signer\Contracts\Signable;
    use Hotrush\Signer\Contracts\Traits\CanBeSigned;
        
    class Post extends Model implements Signable
    {
        use CanBeSigned;
        
        /**
         * Return null if never expires.
         *
         * @return Carbon|null
         */
        public function getSignExpiration(): ?Carbon
        {
            return null;
        }
    
        /**
         * Payload used for making signature hash.
         *
         * @return array
         */
        public function getSignPayload(): array
        {
            return [
                $this->getKeyName() => $this->getKey(),
                'field' => $this->field,
            ];
        }
    
        /**
         * Payload put into encoded code. Will be publicly accessible.
         *
         * @return array
         */
        public function getPublicSignPayload(): array
        {
            return [
                $this->getKeyName() => $this->getKey(),
            ];
        }
        
        /**
         * Define where clause for getting signable model instance by signature.
         * Only values from public payload can be used.
         */
        public static function signableClauses(Signature $signature): \Closure
        {
            return function (Builder $query) use ($signature) {
                $query->where('id', '=', $signature->payload['id']);
            };
        }
    }
  3. 使用外观生成签名

    use Hotrush\Signer\Facades\Signer;
    
    $signable = Post::find(1);
    $signature = Signer::generate($signable);
    
    echo (string) $signature;

    签名可以被转换成字符串,例如发送确认码。

  4. 要验证代码,也可以使用外观。但首先需要解码签名。

    use Hotrush\Signer\Facades\Signer;
    use Hotrush\Signer\Signature;
    
    // decode signature
    $signature = Signature::decode('signature-string-value');
    
    // get signable
    $signable = Post::findSignable($signature);
    
    // verify
    $valid = Signer::validate($signable, $signature);

测试

composer test