afsakar/filament-otp-login

FilamentPHP 的OTP登录

v1.3.5 2024-09-03 19:18 UTC

This package is auto-updated.

Last update: 2024-09-03 19:22:28 UTC


README

Latest Version on Packagist Total Downloads

Screenshot

此包是FilamentPHP的OTP登录。它是一个简单的包,允许您使用OTP登录到您的FilamentPHP应用程序。

安装

您可以通过composer安装此包

composer require afsakar/filament-otp-login

您可以使用以下命令发布和运行迁移

php artisan vendor:publish --tag="filament-otp-login-migrations"
php artisan migrate

您可以使用以下命令发布配置和翻译文件

php artisan vendor:publish --tag="filament-otp-login-config"
php artisan vendor:publish --tag="filament-otp-login-translations"

可选地,您可以使用以下命令发布视图

php artisan vendor:publish --tag="filament-otp-login-views"

这是已发布配置文件的内容

return [
    'table_name' => 'otp_codes', // Table name to store OTP codes

    'otp_code' => [
        'length' => env('OTP_LOGIN_CODE_LENGTH', 6), // Length of the OTP code
        'expires' => env('OTP_LOGIN_CODE_EXPIRES_SECONDS', 120), // Expiration time of the OTP code in seconds
    ],
];

使用方法

只需在您的面板提供者文件中注册 Afsakar\FilamentOtpLogin\FilamentOtpLoginPlugin 插件。

use Afsakar\FilamentOtpLogin\FilamentOtpLoginPlugin;

    public function panel(Panel $panel): Panel
    {
        return $panel
            ->plugins([
                FilamentOtpLoginPlugin::make(),
            ]);
    }

如果您想忽略OTP登录的特定用户组,只需在您的用户模型中实现 Afsakar\FilamentOtpLogin\Models\Contracts\CanLoginDirectly 特性。

use Afsakar\FilamentOtpLogin\Models\Contracts\CanLoginDirectly;

class User extends Authenticatable implements CanLoginDirectly
{
    use HasFactory, Notifiable;

    // other user model code

    public function canLoginDirectly(): bool
    {
        return str($this->email)->endsWith('@example.com');
    }
}

注意:对于中大型应用程序,您只需运行 "php artisan model:prune" 命令作为cron,以防止otp_code表膨胀和性能问题。

自定义登录页面

如果您想自定义登录页面,可以扩展 \Afsakar\FilamentOtpLogin\Filament\Pages\Login 页面,并在面板提供者文件中使用 loginPage 方法设置您的自定义登录页面。

<?php

namespace App\Filament\Pages;

use Afsakar\FilamentOtpLogin\Filament\Pages\Login as OtpLogin;
use Illuminate\Contracts\Support\Htmlable;

class OverrideLogin extends OtpLogin
{
    public function getHeading(): string | Htmlable
    {
        return 'Example Login Heading';
    }
}
use App\Filament\Pages\OverrideLogin;

    public function panel(Panel $panel): Panel
    {
        return $panel
            ->plugins([
                FilamentOtpLoginPlugin::make()
                    ->loginPage(OverrideLogin::class),
            ]);
    }

测试

composer test

更新日志

有关最近更改的更多信息,请参阅 更新日志

贡献

有关详细信息,请参阅 贡献指南

安全漏洞

请查看 我们的安全策略 了解如何报告安全漏洞。

鸣谢

许可证

MIT许可证(MIT)。请参阅 许可证文件 了解更多信息。