
# 入门套件
- [简介](#introduction)
- [使用入门套件创建应用](#creating-an-application)
- [可用的入门套件](#available-starter-kits)
    - [React](#react)
    - [Svelte](#svelte)
    - [Vue](#vue)
    - [Livewire](#livewire)
- [自定义入门套件](#starter-kit-customization)
    - [React](#react-customization)
    - [Svelte](#svelte-customization)
    - [Vue](#vue-customization)
    - [Livewire](#livewire-customization)
- [认证](#authentication)
    - [启用和禁用功能](#enabling-and-disabling-features)
    - [自定义用户创建与密码重置](#customizing-actions)
    - [双因素认证](#two-factor-authentication)
    - [频率限制](#rate-limiting)
- [团队协作](#teams)
- [WorkOS AuthKit 认证](#workos)
- [Inertia SSR](#inertia-ssr)
- [社区维护的入门套件](#community-maintained-starter-kits)
- [常见问题解答](#faqs)

<a name="introduction"></a>
## 简介

为了助你更快地开启新的 Laravel 应用开发，我们很高兴地提供[应用入门套件](https://laravel.com/starter-kits)。这些入门套件为你构建下一个 Laravel 应用程序提供了良好的开端，并包含注册和认证应用用户所需的路由、控制器和视图。入门套件使用 [Laravel Fortify](/docs/laravel/13.x/fortify) 提供认证功能。

虽然我们欢迎你使用这些入门套件，但并非强制要求。你完全可以安装一份全新的 Laravel，从零开始构建自己的应用。无论如何，我们相信你一定能打造出出色的作品！

<a name="creating-an-application"></a>
## 使用入门套件创建应用

要使用我们的某个入门套件创建新的 Laravel 应用，首先需要[安装 PHP 和 Laravel CLI 工具](/docs/laravel/13.x/installation#installing-php)。如果你已经安装了 PHP 和 Composer，可以通过 Composer 安装 Laravel CLI 安装器工具：

```shell
composer global require laravel/installer
```



然后，使用 Laravel CLI 安装器创建一个新的 Laravel 应用。Laravel 安装器会提示你选择喜欢的入门套件：

```shell
laravel new my-app
```

创建完 Laravel 应用后，你只需通过 NPM 安装前端依赖，并启动 Laravel 开发服务器：


```shell
cd my-app
npm install && npm run build
composer run dev
```

启动 Laravel 开发服务器后，你的应用便可以在浏览器中通过 [http://localhost:8000](http://localhost:8000) 访问。

<a name="available-starter-kits"></a>
## 可用的入门套件

<a name="react"></a>
### React

我们的 React 入门套件为使用 [Inertia](https://inertiajs.com) 构建 React 前端的 Laravel 应用提供了一个健壮且现代的起点。

Inertia 让你能够使用经典的服务端路由和控制器来构建现代化的单页 React 应用。这使你既能享受 React 的前端强大能力，又能结合 Laravel 惊人的后端开发效率以及极速的 Vite 编译体验。

React 入门套件采用了 React 19、TypeScript、Tailwind 以及 [shadcn/ui](https://ui.shadcn.com) 组件库。

<a name="svelte"></a>
### Svelte

我们的 Svelte 入门套件为使用 [Inertia](https://inertiajs.com) 构建 Svelte 前端的 Laravel 应用提供了一个健壮且现代的起点。

Inertia 让你能够使用经典的服务端路由和控制器来构建现代化的单页 Svelte 应用。这使你既能享受 Svelte 的前端强大能力，又能结合 Laravel 惊人的后端开发效率以及极速的 Vite 编译体验。

Svelte 入门套件采用了 Svelte 5、TypeScript、Tailwind 以及 [shadcn-svelte](https://www.shadcn-svelte.com/) 组件库。


<a name="vue"></a>
### Vue

我们的 Vue 入门套件为使用 [Inertia](https://inertiajs.com) 构建 Vue 前端的 Laravel 应用提供了一个出色的起点。

Inertia 让你能够使用经典的服务端路由和控制器来构建现代化的单页 Vue 应用。这使你既能享受 Vue 的前端强大能力，又能结合 Laravel 惊人的后端开发效率以及极速的 Vite 编译体验。

Vue 入门套件采用了 Vue 组合式 API、TypeScript、Tailwind 以及 [shadcn-vue](https://www.shadcn-vue.com/) 组件库。

<a name="livewire"></a>
### Livewire

我们的 Livewire 入门套件为使用 [Laravel Livewire](https://livewire.laravel.com) 构建前端的 Laravel 应用提供了完美的起点。

Livewire 是一种仅用 PHP 构建动态、响应式前端 UI 的强大方式。它非常适合主要使用 Blade 模板的团队，且希望寻找一种比 React、Svelte 和 Vue 等 JavaScript 驱动的 SPA 框架更简单的替代方案。

Livewire 入门套件采用了 Livewire、Tailwind 以及 [Flux UI](https://fluxui.dev) 组件库。

<a name="starter-kit-customization"></a>
## 自定义入门套件

<a name="react-customization"></a>
### React

我们的 React 入门套件基于 Inertia 3、React 19、Tailwind 4 和 [shadcn/ui](https://ui.shadcn.com) 构建。与所有入门套件一样，后端和前端代码全部位于你的应用中，以便完全自定义。

前端代码主要位于 `resources/js` 目录中。你可以自由修改任何代码，以自定义应用的外观和行为：

```text
resources/js/
├── components/    # 可复用的 React 组件
├── hooks/         # React 钩子函数
├── layouts/       # 应用布局
├── lib/           # 工具函数和配置
├── pages/         # 页面组件
└── types/         # TypeScript 类型定义
```


要发布额外的 shadcn 组件，首先 [找到你想要发布的组件](https://ui.shadcn.com/)。然后，使用 `npx` 发布该组件：

```shell
npx shadcn@latest add switch
```

在这个示例中，该命令会将 Switch 组件发布到 `resources/js/components/ui/switch.tsx`。组件发布后，你就可以在任何页面中使用它：

```jsx
import { Switch } from "@/components/ui/switch"

const MyPage = () => {
  return (
    <div>
      <Switch />
    </div>
  );
};

export default MyPage;
```

<a name="react-available-layouts"></a>
#### 可用的布局

React 入门套件包含两种不同的主要布局供你选择：一种「侧边栏」布局和一种「顶部导航」布局。默认使用侧边栏布局，但你可以通过修改应用 `resources/js/layouts/app-layout.tsx` 文件顶部导入的布局来切换为顶部导航布局：

```js
import AppLayoutTemplate from '@/layouts/app/app-sidebar-layout'; // [tl! remove]
import AppLayoutTemplate from '@/layouts/app/app-header-layout'; // [tl! add]
```

<a name="react-sidebar-variants"></a>
#### 侧边栏变体

侧边栏布局包含三种不同的变体：默认侧边栏变体、「嵌入」变体和「浮动」变体。你可以通过修改 `resources/js/components/app-sidebar.tsx` 组件来选择最喜欢的变体：

```text
<Sidebar collapsible="icon" variant="sidebar"> [tl! remove]
<Sidebar collapsible="icon" variant="inset"> [tl! add]
```

<a name="react-authentication-page-layout-variants"></a>
#### 认证页面布局变体

React 入门套件包含的认证页面（如登录页面和注册页面）同样提供三种不同的布局变体：「简约」、「卡片」和「分栏」。

要更改认证布局，修改应用 `resources/js/layouts/auth-layout.tsx` 文件顶部导入的布局即可：

```js
import AuthLayoutTemplate from '@/layouts/auth/auth-simple-layout'; // [tl! remove]
import AuthLayoutTemplate from '@/layouts/auth/auth-split-layout'; // [tl! add]
```


<a name="svelte-customization"></a>
### Svelte

我们的 Svelte 入门套件基于 Inertia 3、Svelte 5、Tailwind 和 [shadcn-svelte](https://www.shadcn-svelte.com/) 构建。与我们所有的入门套件一样，所有的后端和前端代码都存在于你的应用程序中，以实现完全自定义。

前端代码主要位于 `resources/js` 目录中。你可以自由修改任何代码，以自定义应用的外观和行为：

```text
resources/js/
├── components/ # 可复用的 Svelte 组件
├── layouts/ # 应用布局
├── lib/ # 工具函数、配置及 Svelte rune 模块
├── pages/ # 页面组件
└── types/ # TypeScript 类型定义
```

要发布更多 shadcn-svelte 组件，首先[找到你想要发布的组件](https://www.shadcn-svelte.com)，然后使用 `npx` 命令进行发布：

```shell
npx shadcn-svelte@latest add switch
```

在这个示例中，该命令会将 Switch 组件发布到 `resources/js/components/ui/switch/switch.svelte`。组件发布后，你就可以在任何页面中使用它：

```svelte
<script lang="ts">
    import { Switch } from '@/components/ui/switch'
</script>

<div>
    <Switch />
</div>
```

<a name="svelte-available-layouts"></a>
#### 可用的布局

Svelte 入门套件包含两种不同的主要布局供你选择：一种「侧边栏」布局和一种「顶部导航」布局。默认使用侧边栏布局，但你可以通过修改应用 `resources/js/layouts/AppLayout.svelte` 文件顶部导入的布局来切换为顶部导航布局：

```js
import AppLayout from '@/layouts/app/AppSidebarLayout.svelte'; // [tl! remove]
import AppLayout from '@/layouts/app/AppHeaderLayout.svelte'; // [tl! add]
```



#### 侧边栏变体

侧边栏布局包含三种不同的变体：默认侧边栏变体、`"inset"` 变体，以及 `"floating"` 变体。你可以通过修改 `resources/js/components/AppSidebar.svelte` 组件来选择你最喜欢的变体：

```text
<Sidebar collapsible="icon" variant="sidebar"> [tl! remove]
<Sidebar collapsible="icon" variant="inset"> [tl! add]
```

#### 认证页面布局变体

Svelte 启动套件中包含的认证页面，例如登录页面和注册页面，也提供三种不同的布局变体：`"simple"`、`"card"` 和 `"split"`。

要更改认证页面布局，请修改应用程序 `resources/js/layouts/AuthLayout.svelte` 文件顶部导入的布局：

```js
import AuthLayout from '@/layouts/auth/AuthSimpleLayout.svelte'; // [tl! remove]
import AuthLayout from '@/layouts/auth/AuthSplitLayout.svelte'; // [tl! add]
```

### Vue

我们的 Vue 启动套件基于 Inertia 3、Vue 3 Composition API、Tailwind 和 [shadcn-vue](https://www.shadcn-vue.com/) 构建。与我们所有的启动套件一样，所有后端和前端代码都包含在你的应用程序中，因此你可以进行完全自定义。

大部分前端代码都位于 `resources/js` 目录中。你可以自由修改其中的任何代码，以自定义应用程序的外观和行为：

```text
resources/js/
├── components/    # 可复用的 Vue 组件
├── composables/   # Vue composables / hooks
├── layouts/       # 应用程序布局
├── lib/           # 工具函数和配置
├── pages/         # 页面组件
└── types/         # TypeScript 类型定义
```

要添加其他 shadcn-vue 组件，请先[找到你想要添加的组件](https://www.shadcn-vue.com)。然后使用 `npx` 添加该组件：

```shell
npx shadcn-vue@latest add switch
```



在这个示例中，该命令将把 Switch 组件发布到 `resources/js/components/ui/Switch.vue`。 组件发布后, 您可以在任何页面中使用它：

```vue
<script setup lang="ts">
import { Switch } from '@/components/ui/switch'
</script>

<template>
    <div>
        <Switch />
    </div>
</template>
```

<a name="vue-available-layouts"></a>
#### 可选布局

Vue 入门套件包含两种不同的主要布局供您选择：「侧边栏」 布局和 「页眉」 布局。侧边栏布局是默认布局，但您可以通过修改应用程序的 `resources/js/layouts/AppLayout.vue` 文件顶部导入的布局来切换到页眉布局：

```js
import AppLayout from '@/layouts/app/AppSidebarLayout.vue'; // [tl! 移除]
import AppLayout from '@/layouts/app/AppHeaderLayout.vue'; // [tl! 增加]
```

<a name="vue-sidebar-variants"></a>
#### 侧边栏变体

侧边栏布局包括三种不同的变体：默认侧边栏变体、「内嵌」 变体和 「浮动」 变体。您可以通过修改 `resources/js/components/AppSidebar.vue` 组件来选择您最喜欢的变体：

```text
<Sidebar collapsible="icon" variant="sidebar"> [tl! 移除]
<Sidebar collapsible="icon" variant="inset"> [tl! 增加]
```

<a name="vue-authentication-page-layout-variants"></a>
#### 认证页面布局变体

Vue 入门套件中包含的认证页面，例如登录页面和注册页面，也提供了三种不同的布局变体：「简单」 、 「卡片」 和 「分屏」 。

要更改您的认证布局，请修改在应用程序的 `resources/js/layouts/AuthLayout.vue` 文件顶部导入的布局：

```js
import AuthLayout from '@/layouts/auth/AuthSimpleLayout.vue'; // [tl! 移除]
import AuthLayout from '@/layouts/auth/AuthSplitLayout.vue'; // [tl! 增加]
```



### Livewire

我们的 Livewire 启动套件基于 Livewire 4、Tailwind 和 [Flux UI](https://fluxui.dev/) 构建。与我们所有的启动套件一样，所有后端和前端代码都包含在你的应用程序中，因此你可以进行完全自定义。

大部分前端代码都位于 `resources/views` 目录中。你可以自由修改其中的任何代码，以自定义应用程序的外观和行为：

```text
resources/views
├── components            # 可复用组件
├── flux                  # 自定义的 Flux 组件
├── layouts               # 应用程序布局
├── pages                 # Livewire 页面
├── partials              # 可复用的 Blade 局部模板
├── dashboard.blade.php   # 已认证用户的仪表盘
├── welcome.blade.php     # 访客用户欢迎页面
```


#### 可用布局

Livewire 启动套件提供两种不同的主要布局供你选择：`"sidebar"` 侧边栏布局和 `"header"` 顶部栏布局。

默认使用侧边栏布局，但你可以通过修改应用程序的 `resources/views/layouts/app.blade.php` 文件中使用的布局来切换为顶部栏布局。

此外，你还应该为主要的 Flux 组件添加 `container` 属性：

```blade
<x-layouts::app.header>
    <flux:main container>
        {{ $slot }}
    </flux:main>
</x-layouts::app.header>
```

#### 认证页面布局变体

Livewire 启动套件中包含的认证页面，例如登录页面和注册页面，同样提供三种不同的布局变体：`"simple"`、`"card"` 和 `"split"`。

要更改认证页面布局，请修改应用程序的 `resources/views/layouts/auth.blade.php` 文件中使用的布局：

```blade
<x-layouts::auth.split>
    {{ $slot }}
</x-layouts::auth.split>
```



## 身份认证

所有启动套件都使用 [Laravel Fortify](/docs/laravel/13.x/fortify) 来处理身份认证。Fortify 提供了登录、注册、密码重置、邮箱验证等功能所需的路由、控制器和相关逻辑。

Fortify 会根据应用程序 `config/fortify.php` 配置文件中启用的功能，自动注册以下身份认证路由：

| 路由 | 方法 | 描述 |
| --- | --- | --- |
| `/login` | `GET` | 显示登录表单 |
| `/login` | `POST` | 验证用户身份 |
| `/logout` | `POST` | 用户退出登录 |
| `/register` | `GET` | 显示注册表单 |
| `/register` | `POST` | 创建新用户 |
| `/forgot-password` | `GET` | 显示密码重置请求表单 |
| `/forgot-password` | `POST` | 发送密码重置链接 |
| `/reset-password/{token}` | `GET` | 显示密码重置表单 |
| `/reset-password` | `POST` | 更新密码 |
| `/email/verify` | `GET` | 显示邮箱验证提示 |
| `/email/verify/{id}/{hash}` | `GET` | 验证邮箱地址 |
| `/email/verification-notification` | `POST` | 重新发送验证邮件 |
| `/user/confirm-password` | `GET` | 显示密码确认表单 |
| `/user/confirm-password` | `POST` | 确认密码 |
| `/two-factor-challenge` | `GET` | 显示双因素认证（2FA）验证表单 |
| `/two-factor-challenge` | `POST` | 验证 2FA 验证码 |

可以使用 `php artisan route:list` Artisan 命令查看应用程序中的所有路由。

### 启用和禁用功能

你可以在应用程序的 `config/fortify.php` 配置文件中控制启用哪些 Fortify 功能：

```php
use Laravel\Fortify\Features;

'features' => [
    Features::registration(),
    Features::resetPasswords(),
    Features::emailVerification(),
    Features::twoFactorAuthentication([
        'confirm' => true,
        'confirmPassword' => true,
    ]),
],
```

要禁用某个功能，可以将 `features` 数组中对应的功能项注释掉或删除。例如，删除 `Features::registration()` 即可禁用公开注册功能。

当使用 [React](#react)、[Svelte](#svelte) 或 [Vue](#vue) 启动套件时，你还需要删除前端代码中对已禁用功能相关路由的所有引用。

例如，如果你禁用了邮箱验证功能，就应该删除 React、Svelte 或 Vue 组件中对 `verification` 路由的导入和引用。

这是必要的，因为这些启动套件使用 Wayfinder 来实现类型安全的路由。Wayfinder 会在构建时生成路由定义。如果你的代码引用了已经不存在的路由，应用程序将无法成功构建。



### 自定义用户创建和密码重置

当用户注册或重置密码时，Fortify 会调用位于应用程序 `app/Actions/Fortify` 目录中的 Action 类：

| 文件 | 描述 |
| --- | --- |
| `CreateNewUser.php` | 验证并创建新用户 |
| `ResetUserPassword.php` | 验证并更新用户密码 |
| `PasswordValidationRules.php` | 定义密码验证规则 |

例如，如果要自定义应用程序的注册逻辑，你应该编辑 `CreateNewUser` Action：

```php
public function create(array $input): User
{
    Validator::make($input, [
        'name' => ['required', 'string', 'max:255'],
        'email' => ['required', 'email', 'max:255', 'unique:users'],
        'phone' => ['required', 'string', 'max:20'], // [tl! add]
        'password' => $this->passwordRules(),
    ])->validate();

    return User::create([
        'name' => $input['name'],
        'email' => $input['email'],
        'phone' => $input['phone'], // [tl! add]
        'password' => Hash::make($input['password']),
    ]);
}
```

### 双因素认证

启动套件内置了双因素认证（2FA）功能，允许用户使用任何兼容 TOTP 的身份验证器应用来保护自己的账户。
2FA 默认通过应用程序 `config/fortify.php` 配置文件中的 `Features::twoFactorAuthentication()` 启用。
`confirm` 选项要求用户在 2FA 完全启用之前验证一次验证码，而 `confirmPassword` 选项则要求用户在启用或禁用 2FA 之前先确认自己的密码。
更多详细信息，请参阅 [Fortify 的双因素认证文档](/docs/laravel/13.x/fortify#two-factor-authentication)。

### 请求频率限制

请求频率限制可以防止暴力破解，并避免大量重复登录尝试对身份认证接口造成过大压力。
你可以在应用程序的 `FortifyServiceProvider` 中自定义 Fortify 的请求频率限制行为：

```php
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Cache\RateLimiting\Limit;

RateLimiter::for('login', function ($request) {
    return Limit::perMinute(5)->by($request->email.$request->ip());
});
```



## 团队

React、Svelte、Vue 和 Livewire 启动套件也可以在生成时启用团队支持。

启用团队功能后，每个用户都可以属于一个或多个团队，并且会有一个当前团队。用户注册时，系统会自动为新用户创建一个个人团队。启动套件还包含团队管理页面，可用于创建团队、切换团队、邀请成员以及更新团队信息。
当某个路由限定在当前团队范围内时，当前团队的 slug 会包含在 URL 中。例如，仪表盘路由会变为 `/{current_team}/dashboard`，而团队管理页面则会使用类似 `settings/teams/{team}` 的路由。
在使用 `{current_team}` 和 `{team}` 路由参数时，启动套件会自动确保当前已认证用户属于所请求的团队，然后才允许访问该路由。
为了更方便地生成包含团队上下文的 URL，启动套件会为已认证用户的当前团队注册 URL 默认值。这样，在调用 `route('dashboard')` 等辅助函数时，就会自动包含当前团队的 slug。
当用户登录、注册或切换团队时，启动套件会更新当前团队，并刷新这些 URL 默认值，从而确保生成的链接始终使用正确的团队上下文。
在创建或重命名团队时，启动套件还会阻止用户使用可能导致不安全或路由冲突的保留名称。
例如，与 `settings`、`login` 或 `dashboard` 等路由前缀冲突的名称将无法使用。

## WorkOS AuthKit 身份认证



默认情况下，React、Svelte、Vue 和 Livewire 启动套件均使用 Laravel 内置的身份验证系统来提供登录、注册、密码重置、电子邮件验证等功能。此外，我们还为每个启动套件提供了由 [WorkOS AuthKit](https://authkit.com?utm_source=chatgpt.com) 驱动的版本，该版本提供：

<div class="content-list" markdown="1">

- 社交身份验证（Google、Microsoft、GitHub 和 Apple）
- 通行密钥身份验证 
- 基于电子邮件的“Magic Auth”
- 单点登录（SSO）

</div>

使用 WorkOS 作为身份验证提供商[需要一个 WorkOS 账户](https://workos.com?utm_source=chatgpt.com)。WorkOS 为每月活跃用户数不超过 100 万的应用程序提供免费的身份验证服务。

要使用 WorkOS AuthKit 作为应用程序的身份验证提供商，请在通过 `laravel new` 创建由启动套件驱动的新应用程序时，选择 WorkOS 选项。

### 配置 WorkOS 启动套件

使用由 WorkOS 驱动的启动套件创建新应用程序后，你应在应用程序的 `.env` 文件中设置 `WORKOS_CLIENT_ID`、`WORKOS_API_KEY` 和 `WORKOS_REDIRECT_URL` 环境变量。这些变量应与你在 WorkOS 控制面板中为应用程序获取的值一致：

```ini
WORKOS_CLIENT_ID=your-client-id
WORKOS_API_KEY=your-api-key
WORKOS_REDIRECT_URL="${APP_URL}/authenticate"
```

此外，你还应在 WorkOS 控制面板中配置应用程序的主页 URL。用户退出应用程序后，将被重定向到此 URL。

#### 配置 AuthKit 身份验证方式

使用由 WorkOS 驱动的启动套件时，我们建议你在应用程序的 WorkOS AuthKit 配置设置中禁用“电子邮件 + 密码”身份验证，使用户只能通过社交身份验证提供商、通行密钥、“Magic Auth”和 SSO 进行身份验证。这样可以使你的应用程序完全无需处理用户密码。



#### 配置 AuthKit 会话超时时间

此外，我们建议将 WorkOS AuthKit 的会话非活动超时时间配置为与 Laravel 应用程序配置的会话超时阈值一致，该阈值通常为两小时。

### Inertia SSR

React、Svelte 和 Vue 启动套件均兼容 Inertia 的[服务端渲染](https://inertiajs.com/server-side-rendering?utm_source=chatgpt.com)功能。要为应用程序构建兼容 Inertia SSR 的资源包，请运行 `build:ssr` 命令：

```shell
npm run build:ssr
```

为了方便使用，还提供了 `composer dev:ssr` 命令。该命令会在为应用程序构建兼容 SSR 的资源包后，启动 Laravel 开发服务器和 Inertia SSR 服务器，从而允许你在本地使用 Inertia 的服务端渲染引擎测试应用程序：

```shell
composer dev:ssr
```

### 社区维护的启动套件

使用 Laravel 安装程序创建新的 Laravel 应用程序时，你可以将 Packagist 上任何由社区维护的启动套件通过 `--using` 参数指定：

```shell
laravel new my-app --using=example/starter-kit
```

#### 创建启动套件

为了确保其他人能够使用你的启动套件，你需要将其发布到 [Packagist](https://packagist.org?utm_source=chatgpt.com)。你的启动套件应在其 `.env.example` 文件中定义所需的环境变量，并且任何必要的安装后命令都应列在启动套件的 `composer.json` 文件的 `post-create-project-cmd` 数组中。

### 常见问题

#### 如何升级？

每个启动套件都为你的下一个应用程序提供了一个可靠的起点。你拥有代码的完全所有权，可以根据自己的设想调整、自定义和构建应用程序。但是，你无需更新启动套件本身。



#### 如何启用电子邮件验证？

可以通过取消 `App/Models/User.php` 模型中 `MustVerifyEmail` 导入语句的注释，并确保该模型实现 `MustVerifyEmail` 接口来添加电子邮件验证功能：

```php
<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
// ...

class User extends Authenticatable implements MustVerifyEmail
{
    // ...
}
```

注册后，用户将收到一封验证邮件。若要限制用户在验证电子邮件地址之前访问某些路由，请为这些路由添加 `verified` 中间件：

```php
Route::middleware(['auth', 'verified'])->group(function () {
    Route::get('dashboard', function () {
        return Inertia::render('dashboard');
    })->name('dashboard');
});
```

> [!注意]
> 使用启动套件的 WorkOS 版本时，不需要进行电子邮件验证。

#### 如何修改默认电子邮件模板？

你可能希望自定义默认电子邮件模板，使其更符合应用程序的品牌风格。要修改此模板，你应使用以下命令将电子邮件视图发布到应用程序中：

```
php artisan vendor:publish --tag=laravel-mail
```

这将在 `resources/views/vendor/mail` 中生成多个文件。你可以修改其中任何文件，以及 `resources/views/vendor/mail/themes/default.css` 文件，以更改默认电子邮件模板的外观和样式。

