Logo
Section 1 / 5

通过 API 欢迎新用户

准备好第一个API端点:用户注册。

导入

通过 API 欢迎新用户

准备好第一个API端点:用户注册。

用户模型与迁移

默认情况下,每个新创建的 Laravel Web 应用都会自带用户模块的模型和迁移文件。当前默认字段已满足本项目需求,无需添加或删除任何字段。

开放注册接口

我们可以直接在 routes/api.php 文件中添加一个 POST 路由,用于接收注册新用户的请求(注意:应放在 routes/api.php 而非 routes/web.php)。

1<?php 2 3use App\Http\Controllers\RegisterController; 4use Illuminate\Support\Facades\Route; 5 6Route::post('/register', RegisterController::class);

使用控制器处理请求

你已经知道,当某个路由被调用时,控制器负责处理请求。在本课程中,我们将通过遵循一些最佳实践来保持代码整洁清晰。以下是几个关键点:

  • 一个方法应只做一件事,一个类应仅围绕单一功能或模块。
  • 由于 RegisterController 类中只有一个方法,我们可以使用 __invoke 魔术方法将其设为可调用类。
  • 我们将使用另一个类来完成数据验证。

No configuration found for ID: ceb07e94535d7566e425d2f1ba9fb3ee548152b044bc8f0c36d8f773e54602f9

在线运行代码

你可以在线运行这段代码,并通过 Postman 访问 API 接口。你甚至可以修改代码,点击“运行”按钮,然后用更新后的代码再次测试。

点击“运行”按钮。服务器启动后,点击“Your app can be found at:”后面的链接。

按照上一课中的步骤操作,从打开 Postman 到添加“register”请求。

只需一行代码,我们就能实现以下功能:

  1. 使用 Laravel 的 表单请求 功能对 POST 数据进行验证。(具体实现见下文)
  2. 将验证后的数据用于创建新用户。

我们还可以为该用户生成一个新的 API Token,并返回给请求方。

这是一种快捷方式:用户无需登录,即可直接使用该令牌访问需要认证的路由。此功能适用于不需要用户验证邮箱地址的场景。

1$user = User::create($request->validated()); 2 3return [ 4 'token' => $user->createToken($user->name)->plainTextToken, 5];

需要注意的是,这仅在你根据 Sanctum 的要求对用户模型做出相应更新后才有效。更多细节请参阅本课程中关于登录用户的章节。

密码哈希处理

你可能已经了解,密码是高度敏感的信息。绝对不应以明文形式存储,更不应加密,因为加密可能被破解。

Laravel Eloquent 提供了一个名为 属性突变器 的优秀特性,在数据存入数据库前自动触发。我们可以利用这一机制,在用户密码写入数据库前对其进行哈希处理。

1<?php 2 3namespace App\Models; 4 5use Illuminate\Database\Eloquent\Factories\HasFactory; 6use Illuminate\Foundation\Auth\User as Authenticatable; 7use Laravel\Sanctum\HasApiTokens; 8 9class User extends Authenticatable 10{ 11 // ... 12 13 public function setPasswordAttribute(string $value): void 14 { 15 $this->attributes['password'] = bcrypt($value); 16 } 17}

数据验证

如前所述,我们使用名为 RegisterValidation 的“表单请求”类来验证数据。“表单请求”类还支持授权辅助功能,但目前我们无需关注这部分内容。

验证规则非常基础:email 必须是有效的唯一邮箱地址;password 至少 6 位,并需配合 password_confirmation 字段进行确认。

No configuration found for ID: eb5062a1b16ee3284f8e498387513b406fa926ebadaddf02711fe55d73ed30b6

你可以通过 .json 文件导入集合到你的工作区。点击“导入”按钮,随后出现对话框,点击“上传文件”即可完成导入。

...
通过 .json 文件导入集合

按照上述步骤,从 \ 文件夹中导入 register.json 文件。

默认已创建 Restaurant API 集合及“register”请求。你可以尝试输入不同的数据值,以测试验证规则。

这就是 Laravel 的强大之处:它会自动返回错误信息,并将 HTTP 状态码设置为 422(表示验证失败)。同时返回 JSON 格式的数据,因为我们发送了请求头。

通过 Postman 测试

在运行上述代码后,你可以在上一课创建的 Postman 请求中填写正确的 name、email 和 password 值,然后发送请求。响应状态码应为 200,表示一切正常。此时用户已成功添加至数据库。

至此,我们已手动通过 Postman 成功测试了第一个 API。接下来,我们将为所有新增的 API 接口添加自动化测试。现在你可以自行尝试使用 Postman 测试新的 API 接口。

课程简介

自动化测试