hotrush / laravel-signer
用于为 Laravel 模型创建和验证签名的包。
1.1.0
2023-03-01 10:57 UTC
Requires
- php: ^8.1
- illuminate/contracts: ^9.0|^10.0
- spatie/laravel-package-tools: ^1.13.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^6.0
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^7.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5|^10.0
This package is auto-updated.
Last update: 2024-08-29 14:24:20 UTC
README
Laravel Signer
用于为 Laravel 模型创建和验证签名的包。
安装
composer require hotrush/laravel-signer
用法
-
将
Signable
接口添加到您的模型中use Hotrush\Signer\Contracts\Signable; class Post extends Model implements Signable { }
-
实现接口方法。为了简化此过程,可以使用
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']); }; } }
-
使用外观生成签名
use Hotrush\Signer\Facades\Signer; $signable = Post::find(1); $signature = Signer::generate($signable); echo (string) $signature;
签名可以被转换成字符串,例如发送确认码。
-
要验证代码,也可以使用外观。但首先需要解码签名。
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