Doorman 提供了一种使用邀请码来限制对 Laravel 应用程序的访问的方法。
邀请码:
拉维尔 | 门卫 |
---|---|
5.x | 3.x |
6.x | 4.x |
7.x | 5.x |
8.x | 6.x |
9.x | 7.x |
10.x | 8.x |
11.x | 9.x |
您可以使用 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 ( ' [email protected] ' )-> make ();
或者,如果您只想生成一个邀请,则可以调用once()
而不是调用将返回邀请集合的make()
。
$ invite = Doorman:: generate ()-> for ( ' [email protected] ' )-> once ();
dd ( $ invite -> code );
您可以通过调用redeem
方法来兑换邀请。提供邀请码和可选的电子邮件地址。
Doorman:: redeem ( ' ABCDE ' );
// or
Doorman:: redeem ( ' ABCDE ' , ' [email protected] ' );
如果门卫能够兑换邀请码,则会将兑换次数加 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 ' , ' [email protected] ' );
为了更改门卫返回的错误消息,我们需要发布语言文件,如下所示:
$ 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