ycore / fortify-ui
由 Laravel Fortify 驱动的认证 UI
Requires
- laravel/fortify: ^1.6
Requires (Dev)
- orchestra/testbench: ~5|~6
- phpunit/phpunit: ~9.0
This package is auto-updated.
Last update: 2024-09-08 14:39:53 UTC
README
介绍
FortifyUI 将 Laravel Fortify 的强大认证功能与易于安装的认证 UI 连接起来。
它提供了一个简单而全面的认证框架。它还可以简化现有项目从 Laravel UI 迁移到 Laravel Fortify 认证提供者的升级路径。
要求
FortifyUI 需要 Laravel 8.0+。如果需要,请参阅 升级 Laravel
安装
FortifyUI 提供了 Laravel Fortify 认证后端的头部实现,遵循 Laravel Fortify 文档 中概述的建议。
认证视图和框架是通过使用 FortifyUI 设计或社区贡献的前端包实现的。不需要单独安装 FortifyUI。安装认证前端包也会安装 FortifyUI。
您可以为您的选择的前端库或框架设计自己的认证 UI。 Fortify-unstyled 包将是一个理想的分支前端起始包。
如果您为 FortifyUI 设计的认证前端能够使社区受益,请告诉我们,我们将很高兴将其包含在此处。
安装后配置选项
一旦您安装了认证前端包,就会提供安装后配置选项。
默认安装提供了合理的配置默认值。默认启用了 login
、logout
、registration
和 reset-passwords
功能和路由。如果这些默认值足够,则无需进行额外配置。
FortifyUI 提供了一些精细的配置选项来自定义功能、位置和行为。 artisan 命令本质上结合了多个 vendor:publish --tag
行为和冲突检查,以简化发布配置覆盖。
ℹ️ 使用以下内容显示安装后的配置选项
$ php artisan fortify-ui:publish --help
启用功能
默认安装使用 config/fortify.php
启用了以下功能。
'features' => [ Features::registration(), Features::resetPasswords(), //Features::emailVerification(), //Features::updateProfileInformation(), //Features::twoFactorAuthentication(), //Features::twoFactorAuthentication([ //'confirmPassword' => true, //]), //Features::updatePasswords(), ],
可以在安装后编辑 config/fortify.php
文件来启用或禁用功能。有关其他配置选项,请参阅 Fortify 功能
请参阅 两步验证,了解启用两步验证时的附加要求。
两步验证
可以在 config/fortify.php
中启用两步验证功能。当在配置文件中启用该功能后,FortifyUIServiceProvider 会自动注册视图。
两步验证需要在数据库中迁移额外的字段,并添加到用户模型。
发布 Fortify 迁移
$ php artisan fortify:publish --migrations $ php artisan migrate
添加 TwoFactorAuthenticatable 特性
将 TwoFactorAuthenticatable
特性和隐藏字段添加到 app/Models/User.php
use Laravel\Fortify\TwoFactorAuthenticatable; class User extends Authenticatable { use HasFactory, Notifiable, TwoFactorAuthenticatable; ... protected $hidden = [ 'two_factor_recovery_codes', 'two_factor_secret', ]; ...
发布 Laravel Fortify 配置
$ php artisan fortify:publish --config
用 Laravel Fortify 提供的默认配置覆盖初始安装时发布的 config/fortify.php
。有关其他配置选项,请参阅 Laravel Fortify 文档。
发布 FortifyUI 配置
发布 config/fortify-ui.php
允许自定义视图位置。
$ php artisan fortify:publish --ui-config
可以使用 views
部分来自定义视图位置。
'views' => [ 'login' => 'auth.login', 'register' => 'auth.register', 'verify-email' => 'auth.verify-email', 'reset-password' => 'auth.password.reset-password', 'forgot-password' => 'auth.password.forgot-password', 'confirm-password' => 'auth.password.confirm-password', 'two-factor-challenge' => 'auth.password.two-factor-challenge', 'update-password' => 'profile.update-password', 'two-factor-authentication' => 'profile.two-factor-authentication', 'update-profile-information' => 'profile.update-profile-information', ],
发布 FortifyUI 服务提供者
发布 FortifyUIServiceProvider 允许自定义已启用 Fortify 功能的许多操作和视图位置。
$ php artisan fortify:publish --provider
发布 app/Providers/FortifyUIServiceProvider
文件,并将其注册到您的 app
配置文件的 providers
数组中。
... public function boot(): void { Fortify::createUsersUsing(CreateNewUser::class); Fortify::loginView(function () { return view(config('fortify-ui.views.login')); }); Fortify::confirmPasswordView(function () { return view(config('fortify-ui.views.confirm-password')); }); $this->bootFeatures(); } ... protected function bootFeatures(): void { if (Features::enabled(Features::resetPasswords())) { Fortify::resetUserPasswordsUsing(ResetUserPassword::class); Fortify::requestPasswordResetLinkView(function () { return view(config('fortify-ui.views.forgot-password')); }); Fortify::resetPasswordView(function ($request) { return view(config('fortify-ui.views.reset-password'), ['request' => $request]); }); } if (Features::enabled(Features::registration())) { Fortify::registerView(function () { return view(config('fortify-ui.views.register')); }); } if (Features::enabled(Features::emailVerification())) { Fortify::verifyEmailView(function () { return view(config('fortify-ui.views.verify-email')); }); } if (Features::enabled(Features::updateProfileInformation())) { Fortify::updateUserProfileInformationUsing(UpdateUserProfileInformation::class); } if (Features::enabled(Features::updatePasswords())) { Fortify::updateUserPasswordsUsing(UpdateUserPassword::class); } if (Features::enabled(Features::twoFactorAuthentication())) { Fortify::twoFactorChallengeView(function () { return view(config('fortify-ui.views.two-factor-challenge')); }); } } ...
大杂烩
$ php artisan fortify:publish --all
发布 FortifyUI 和 Laravel Fortify 的所有配置和提供者选项。
有问题吗?
这是否是 Laravel Jetstream 的替代品?
虽然 FortifyUI 和 Laravel Jetstream 都使用 Laravel Fortify,但 Jetstream 提供了大量额外的功能以及额外的脚手架选项,包括 Laravel Livewire 和 Intertia,而 FortifyUI 不旨在复制或替换这些功能。然而,FortifyUI 会遵循 Laravel Fortify 文档 中关于实现无额外脚手架的认证 UI 脚手架的基本建议。
它可以用来替换 Laravel UI 吗?
Laravel UI 已成为许多开发项目的默认简单 Laravel 认证 UI 脚手架,但它不包括许多 Laravel Fortify 功能。由于 Laravel UI 经历了多次迭代,通常与 Laravel 紧密集成,因此很难全面预测所有升级场景。
FortifyUI 虽然是创建并使用来将我们的一些内部和客户项目从 Laravel UI 迁移到基于 Laravel Fortify 的认证实现。
还有其他选项吗?
您可以通过相对直接的 Laravel Fortify 文档 来实现您自己的认证 UI 框架 - 就像我们所做的那样。
Zack Warren 发布了一个具有类似功能但设计略有不同的包。如果我们早点发现它,我们可能已经使用了那个包。
如果您知道更多替代方案,或者您创建了一个使用 FortifyUI 的自定义 UI 框架包,请告诉我们。
变更日志
请参阅 变更日志 了解最近的变化。
贡献
请参阅 贡献指南 了解详细信息。
安全
如果您发现任何安全相关的问题,请通过电子邮件 y-core@outlook.com 而不是使用问题跟踪器来告知我们。
致谢
许可证
MIT。请参阅 许可证文件 了解更多信息。