logo

注册

简介

当然,在任何人可以使用您的应用程序之前,他们都需要创建一个帐户。值得庆幸的是,Jetstream 提供了一个注册视图和一个相应的操作来处理用户注册,这样您就可以专注于构建您的应用程序。

Screenshot of Authentication

操作

与大多数 Jetstream 功能一样,执行以满足注册请求的逻辑可以在应用程序中的操作类中找到。请记住,操作是细粒度的类,负责执行与 Jetstream 或 Fortify 功能相关的单个任务。

具体来说,当用户在您的应用程序中注册时,将调用 App\Actions\Fortify\CreateNewUser 类。此操作负责验证传入的请求输入并创建用户。因此,您希望对用户创建逻辑进行的任何自定义都应在此类中进行。该操作接收一个包含来自传入请求的所有输入的 $input 数组。

密码验证规则

App\Actions\Fortify\CreateNewUserApp\Actions\Fortify\ResetUserPasswordApp\Actions\Fortify\UpdateUserPassword 操作都使用 App\Actions\Fortify\PasswordValidationRules 特性。

您可能已经注意到,App\Actions\Fortify\PasswordValidationRules 特性使用自定义的 Laravel\Fortify\Rules\Password 验证规则对象。此对象允许您轻松地自定义应用程序的密码要求。默认情况下,该规则要求密码至少包含八个字符。但是,您可以使用以下方法自定义密码的要求

php
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()

当然,这些方法可以链接起来以定义应用程序的密码验证规则

php
(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 方法中调用此方法。

php
use Laravel\Fortify\Fortify;

/**
 * Bootstrap any application services.
 */
public function boot(): void
{
    Fortify::registerView(function () {
        return view('auth.register');
    });
}

自定义 Inertia 注册视图

如果您的应用程序使用 Inertia 堆栈,您可以从视图自定义闭包中返回 Inertia 页面。

php
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 配置文件中启用此功能。

php
use Laravel\Jetstream\Features;

'features' => [
    Features::termsAndPrivacyPolicy(),
    // Features::profilePhotos(),
    // Features::api(),
    // Features::teams(),
    Features::accountDeletion(),
],

接下来,您可以通过修改应用程序的 resources/markdown/terms.mdresources/markdown/policy.md 文件来编写您的服务条款/隐私政策文档。

在注册期间,Jetstream 会自动要求用户批准这些文档。当用户点击链接查看文档时,Jetstream 将使用 Tailwind 的排版插件 将 Markdown 渲染成格式优美的散文。

条款和政策本地化

要提供服务条款和隐私政策的本地化版本,您可以使用所需的语言环境后缀文件,例如 terms.es.md。Jetstream 会根据为应用程序配置的当前语言环境自动提供文件的正确版本。

电子邮件验证

Laravel Jetstream 包含对要求新注册用户验证其电子邮件地址的支持。但是,此功能的默认情况下是禁用的。要启用此功能,您应该取消应用程序的 config/fortify.php 配置文件的 features 配置项中的相关条目注释。

php
use Laravel\Fortify\Features;

'features' => [
    Features::registration(),
    Features::resetPasswords(),
    Features::emailVerification(),
    Features::updateProfileInformation(),
    Features::updatePasswords(),
    Features::twoFactorAuthentication(),
],

接下来,您应该确保您的 App\Models\User 类实现了 Illuminate\Contracts\Auth\MustVerifyEmail 接口。此接口已为您导入此模型。

php
use Illuminate\Contracts\Auth\MustVerifyEmail;

class User extends Authenticatable implements MustVerifyEmail
{
    // ...
}

完成这两个设置步骤后,新注册的用户将收到一封电子邮件,提示他们验证其电子邮件地址所有权。

Laravel 邮件

在使用电子邮件验证功能之前,请确保您的 Laravel 应用程序已配置为 发送电子邮件。否则,Laravel 将无法向您的应用程序用户发送电子邮件验证链接。