tpenaranda / aiditokens
在Laravel模型中使用自定义令牌代替ID。
v1.1.0
2019-11-17 10:31 UTC
Requires
- php: ^7.2
- laravel/framework: ^5 || ^6
- laravel/helpers: ^1.1
Requires (Dev)
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-09-17 21:18:45 UTC
README
一个使用自定义字符串令牌代替ID引用模型的Laravel包。
用例
- 你希望在端点上隐藏ID信息。例如,
/api/user/32
将变为/api/user/5cb0b0dddf8ae37a6e8066d4ffd838d91c94bdc7
。 - 你需要创建模型临时引用。例如,为重置密码创建一个两小时后失效的链接
reset/password/user/3f6e660c376c9fcaeaddeb50b0893d73e772100f
。
安装
使用Composer安装包。
$ composer require tpenaranda/aiditokens
运行迁移。
$ php artisan migrate
用法
- 在所需的Laravel模型上包含Tokens特质。
class User extends Model
{
use TPenaranda\Aiditokens\Traits\Tokens;
- 获取(如需要则创建)令牌
>>> $userModel->getToken();
=> "5cb0b0dddf8ae37a6e8066d4ffd838d91c94bdc7"
>>>
>>> $userModel->getToken($expireInHours = 2);
=> "efbbc5efa8e0838f58aa86f2f20a468af8262a43"
>>>
- 通过令牌检索模型
$user = User::firstByToken('5cb0b0dddf8ae37a6e8066d4ffd838d91c94bdc7');
=> App\User {#3214
id: 53,
first_name: "John",
last_name: "Doe",
created_at: "2019-11-15 07:22:59",
updated_at: "2019-11-15 07:23:04",
- 自定义令牌生成
class User extends Model
{
use TPenaranda\Aiditokens\Traits\Tokens;
public function generateToken(): string
{
return str_random(); // Your custom logic goes here.
}
高级用法
- 在RouteServiceProvider上绑定以实现路由模型显式绑定
class RouteServiceProvider extends ServiceProvider
{
public function boot()
{
Route::pattern('userToken', '^.{40}$'); // Watch out this regex if you're using custom tokens.
Route::bind('userToken', function ($value) {
return User::firstByToken($value) ?? abort(404);
});
- 路由文件
Route::get('users/{userToken}', 'UserController@get');
编码愉快!