clarkeash/doorman

v9.0.0 2024-03-25 20:55 UTC

README

GitHub Workflow Status GitHub release (latest SemVer)

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 方法相同的签名,但将返回 truefalse 而不是抛出异常。)

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