buckhamduffy/laravel-two-factor

这是我开发的laravel-two-factor包

v0.2.0 2024-09-23 02:08 UTC

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

这是一个针对Laravel的具有观点的两步验证包。

安装

您可以通过Composer安装此包

composer require buckhamduffy/laravel-two-factor

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

php artisan vendor:publish --tag="two-factor-migrations"
php artisan migrate

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

php artisan vendor:publish --tag="two-factor-config"

这是发布配置文件的内容

return [
];

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

php artisan vendor:publish --tag="two-factor-views"

将特质和接口添加到用户模型中

    use BuckhamDuffy\LaravelTwoFactor\Traits\HasTwoFactor;
    use BuckhamDuffy\LaravelTwoFactor\Interfaces\HasTwoFactorInterface;

    class User extends Model implements HasTwoFactorInterface {
        use HasTwoFactor;
    }

将中间件添加到您的Kernel.php中

    protected $middlewareAliases = [
        // ...
        '2fa' => \BuckhamDuffy\LaravelTwoFactor\Http\Middleware\TwoFactorMiddleware::class,
    ];
    Route::middleware('2fa')->group(function(){
        // Your routes here
    });

短信(尚未实现)

当通过短信请求代码时,将派发一个事件,您可以监听该事件以发送短信。您可以监听TwoFactorCodeRequested事件并使用您首选的短信提供商发送短信。

    use \BuckhamDuffy\LaravelTwoFactor\Events\TwoFactorCodeRequested;
    
    class EventProvider extends ServiceProvider {
        protected $listen = [
            // ...
            TwoFactorCodeRequested::class => [
                \App\Listeners\SendTwoFactorCode::class,
            ],
        ];
    }
    namespace App\Listeners;

    use BuckhamDuffy\LaravelTwoFactor\Events\TwoFactorCodeRequested;
    use Illuminate\Contracts\Queue\ShouldQueue;
    use Illuminate\Queue\InteractsWithQueue;

    class SendTwoFactorCode implements ShouldQueue
    {
        use InteractsWithQueue;

        public function handle(TwoFactorCodeRequested $event): void
        {
           $user = $event->getUser();
           
           $user->sendTwoFactorSms($event->getCode());
        }
    }

CustomThrottlesLogins

这是一个自定义登录节流器,根据用户的电子邮件地址进行节流。这是为了防止对登录页面的暴力破解攻击。

前5次尝试允许,然后节流5分钟。第8次尝试将被锁定15分钟。任何后续尝试将被锁定1小时。

在成功登录后或最后尝试后的24小时后重置尝试。

use Illuminate\Foundation\Auth\AuthenticatesUsers;
use BuckhamDuffy\LaravelTwoFactor\Traits\CustomThrottlesLogins; 

class LoginController extends Controller
{
    use AuthenticatesUsers;
    use CustomThrottlesLogins {
        CustomThrottlesLogins::hasTooManyLoginAttempts insteadof AuthenticatesUsers;
        CustomThrottlesLogins::incrementLoginAttempts insteadof AuthenticatesUsers;
        CustomThrottlesLogins::clearLoginAttempts insteadof AuthenticatesUsers;
        CustomThrottlesLogins::sendLockoutResponse insteadof AuthenticatesUsers;
    }
}

测试

composer test

变更日志

请参阅CHANGELOG以获取最近更改的更多信息。

贡献

请参阅CONTRIBUTING以获取详细信息。

安全漏洞

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

鸣谢

许可

MIT许可(MIT)。有关更多信息,请参阅许可文件