当然,在任何人可以使用您的应用程序之前,他们都需要创建一个帐户。值得庆幸的是,Jetstream 提供了一个注册视图和一个相应的操作来处理用户注册,这样您就可以专注于构建您的应用程序。
与大多数 Jetstream 功能一样,执行以满足注册请求的逻辑可以在应用程序中的操作类中找到。请记住,操作是细粒度的类,负责执行与 Jetstream 或 Fortify 功能相关的单个任务。
具体来说,当用户在您的应用程序中注册时,将调用 App\Actions\Fortify\CreateNewUser
类。此操作负责验证传入的请求输入并创建用户。因此,您希望对用户创建逻辑进行的任何自定义都应在此类中进行。该操作接收一个包含来自传入请求的所有输入的 $input
数组。
App\Actions\Fortify\CreateNewUser
、App\Actions\Fortify\ResetUserPassword
和 App\Actions\Fortify\UpdateUserPassword
操作都使用 App\Actions\Fortify\PasswordValidationRules
特性。
您可能已经注意到,App\Actions\Fortify\PasswordValidationRules
特性使用自定义的 Laravel\Fortify\Rules\Password
验证规则对象。此对象允许您轻松地自定义应用程序的密码要求。默认情况下,该规则要求密码至少包含八个字符。但是,您可以使用以下方法自定义密码的要求
use Laravel\Fortify\Rules\Password;
// Require at least 10 characters...
(new Password)->length(10)
// Require at least one uppercase character...
(new Password)->requireUppercase()
// Require at least one numeric character...
(new Password)->requireNumeric()
// Require at least one special character...
(new Password)->requireSpecialCharacter()
当然,这些方法可以链接起来以定义应用程序的密码验证规则
(new Password)->length(10)->requireSpecialCharacter()
使用 Livewire 堆栈时,注册视图使用 resources/views/auth/register.blade.php
Blade 模板显示。使用 Inertia 堆栈时,此视图使用 resources/js/Pages/Auth/Register.vue
模板显示。您添加到这些页面的任何其他字段都将通过传递给 App\Actions\Fortify\CreateNewUser
操作的 $input
数组提供。
Laravel Jetstream 将自动为应用程序的注册屏幕呈现正确的视图。但是,有时您可能希望自定义视图/页面的呈现方式。
Fortify 的所有身份验证视图渲染逻辑都可以使用 Laravel\Fortify\Fortify
类提供的适当方法进行自定义。通常,您应该从应用程序的 App\Providers\JetstreamServiceProvider
类的 boot
方法中调用此方法。
use Laravel\Fortify\Fortify;
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Fortify::registerView(function () {
return view('auth.register');
});
}
如果您的应用程序使用 Inertia 堆栈,您可以从视图自定义闭包中返回 Inertia 页面。
use Illuminate\Support\Facades\Route;
use Inertia\Inertia;
use Laravel\Fortify\Fortify;
Fortify::registerView(function () {
return Inertia::render('Auth/Register');
});
许多应用程序要求用户在注册期间接受其服务条款/隐私政策。Jetstream 允许您轻松地为自己的应用程序启用此要求,并提供了一种使用 Markdown 编写这些文档的便捷方法。
要开始,请在应用程序的 config/jetstream.php
配置文件中启用此功能。
use Laravel\Jetstream\Features;
'features' => [
Features::termsAndPrivacyPolicy(),
// Features::profilePhotos(),
// Features::api(),
// Features::teams(),
Features::accountDeletion(),
],
接下来,您可以通过修改应用程序的 resources/markdown/terms.md
和 resources/markdown/policy.md
文件来编写您的服务条款/隐私政策文档。
在注册期间,Jetstream 会自动要求用户批准这些文档。当用户点击链接查看文档时,Jetstream 将使用 Tailwind 的排版插件 将 Markdown 渲染成格式优美的散文。
要提供服务条款和隐私政策的本地化版本,您可以使用所需的语言环境后缀文件,例如 terms.es.md
。Jetstream 会根据为应用程序配置的当前语言环境自动提供文件的正确版本。
Laravel Jetstream 包含对要求新注册用户验证其电子邮件地址的支持。但是,此功能的默认情况下是禁用的。要启用此功能,您应该取消应用程序的 config/fortify.php
配置文件的 features
配置项中的相关条目注释。
use Laravel\Fortify\Features;
'features' => [
Features::registration(),
Features::resetPasswords(),
Features::emailVerification(),
Features::updateProfileInformation(),
Features::updatePasswords(),
Features::twoFactorAuthentication(),
],
接下来,您应该确保您的 App\Models\User
类实现了 Illuminate\Contracts\Auth\MustVerifyEmail
接口。此接口已为您导入此模型。
use Illuminate\Contracts\Auth\MustVerifyEmail;
class User extends Authenticatable implements MustVerifyEmail
{
// ...
}
完成这两个设置步骤后,新注册的用户将收到一封电子邮件,提示他们验证其电子邮件地址所有权。
Laravel 邮件
在使用电子邮件验证功能之前,请确保您的 Laravel 应用程序已配置为 发送电子邮件。否则,Laravel 将无法向您的应用程序用户发送电子邮件验证链接。