clarkeash / doorman
Requires
- php: ^8.2
- laravel/framework: ^11.0
- ramsey/uuid: ^4.0
Requires (Dev)
- mockery/mockery: ^1.4
- orchestra/testbench: ^9.0
- phpunit/phpunit: ^11.0
README
Doorman 通过使用邀请码来限制对您的 Laravel 应用的访问。
邀请码
- 可以绑定到特定的电子邮件地址。
- 可以公开给任何人(非常适合在社交媒体上分享)。
- 可以有限制使用次数或无限使用次数。
- 可以有失效日期,或者永不失效。
Laravel 支持
安装
您可以使用 composer 来拉取包。
$ composer require "clarkeash/doorman=^9.0"
接下来,迁移数据库
$ php artisan migrate
使用方法
生成邀请
创建一个具有1次赎回和无限期有效的一般邀请码。
Doorman::generate()->make();
创建5个具有1次赎回和无限期有效的一般邀请码。
Doorman::generate()->times(5)->make();
创建一个具有10次赎回和无限期有效的一般邀请码。
Doorman::generate()->uses(10)->make();
创建一个具有无限次赎回和无限期有效的一般邀请码。
Doorman::generate()->unlimited()->make();
创建一个在特定日期失效的邀请码。
$date = Carbon::now('UTC')->addDays(7); Doorman::generate()->expiresOn($date)->make();
创建一个在14天后失效的邀请码。
Doorman::generate()->expiresIn(14)->make();
为特定的人创建一个邀请码。
Doorman::generate()->for('me@ashleyclarke.me')->make();
或者,如果您只想生成单个邀请码,而不是调用 make()
(这将返回一个邀请码集合),您还可以调用 once()
。
$invite = Doorman::generate()->for('me@ashleyclarke.me')->once(); dd($invite->code);
兑换邀请
您可以通过调用 redeem
方法来兑换邀请。提供邀请码和可选的电子邮件地址。
Doorman::redeem('ABCDE'); // or Doorman::redeem('ABCDE', 'me@ashleyclarke.me');
如果 Doorman 能够兑换邀请码,它将增加1次赎回次数,否则它将抛出异常。
InvalidInviteCode
将抛出,如果该代码在数据库中不存在。ExpiredInviteCode
将抛出,如果设置了失效日期并且它已经过去。MaxUsesReached
将抛出,如果邀请码已被使用最大次数。NotYourInviteCode
将抛出,如果邀请的电子邮件地址与兑换时提供的地址不匹配,或者兑换时没有提供电子邮件地址。
上述所有异常都扩展了 DoormanException
,因此如果您不需要为上述异常执行特定操作,您可以捕获该异常。
try { Doorman::redeem(request()->get('code'), request()->get('email')); } catch (DoormanException $e) { return response()->json(['error' => $e->getMessage()], 422); }
检查邀请码而不兑换
您可以通过调用 check
方法来检查邀请码。提供邀请码和可选的电子邮件地址。(它具有与 redeem
方法相同的签名,但将返回 true
或 false
而不是抛出异常。)
Doorman::check('ABCDE'); // or Doorman::check('ABCDE', 'me@ashleyclarke.me');
更改错误消息(以及翻译支持)
为了更改 doorman 返回的错误消息,我们需要像这样发布语言文件
$ php artisan vendor:publish --tag=doorman-translations
语言文件将在 /resources/lang/vendor/doorman/en
中,您可以在其中编辑 messages.php
文件,这些消息将被 doorman 使用。您可以通过在 /resources/lang/vendor/doorman
目录中创建额外的文件夹并放置 messages.php
文件来支持其他语言,例如在 de
中放置您的德语翻译。 阅读本地化文档以获取更多信息。
验证
如果您希望在尝试兑换邀请码之前对其进行验证,或者您正在使用 表单请求,则可以像这样验证它
public function store(Request $request) { $this->validate($request, [ 'email' => 'required|email|unique:users', 'code' => ['required', new DoormanRule($request->get('email'))], ]); // Add the user to the database. }
您应该将电子邮件地址传递给构造函数,以验证代码与该电子邮件地址匹配。如果您知道该代码可以与任何电子邮件地址一起使用,则可以留空该参数。
配置 - 更改表名
首先发布包配置
$ php artisan vendor:publish --tag=doorman-config
在 config/doorman.php
文件中,您将看到
return [ 'invite_table_name' => 'invites', ];
如果您更改表名并运行迁移,Doorman 将使用新的表名。
控制台
要删除已使用和过期的邀请,您可以使用 cleanup
命令
$ php artisan doorman:cleanup