使用 Laravel Sanctum 进行身份验证
使用 Sanctum 为 SPA 和移动客户端签发并验证 API 令牌。
使用 Laravel Sanctum 进行身份验证 是 CoddyKit 上的免费 PHP Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 PHP Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 PHP Academy 课程共包含 4 节课。
什么是 Sanctum?
Laravel Sanctum 为 SPA 和移动客户端提供简单的基于令牌的身份验证系统。它同时支持 API 令牌身份验证,以及面向第一方 SPA 的基于会话的身份验证。
安装 Sanctum
安装并配置 Sanctum。
$ composer require laravel/sanctum
$ php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
$ php artisan migrate签发令牌
验证用户凭据后,为用户生成个人访问令牌。
<?php
Route::post("/login", function (Request $request) {
$request->validate(["email" => "required", "password" => "required"]);
$user = User::where("email", $request->email)->first();
if (!$user || !Hash::check($request->password, $user->password)) {
throw ValidationException::withMessages([
"email" => ["The provided credentials are incorrect."],
]);
}
$token = $user->createToken("mobile-app")->plainTextToken;
return response()->json(["token" => $token]);
});HasApiTokens 特性
将 HasApiTokens 特性添加到 User 模型,以启用令牌管理。
<?php
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
}保护路由
使用 auth:sanctum 中间件保护 API 路由。
<?php
// routes/api.php
Route::middleware("auth:sanctum")->group(function () {
Route::get("/user", fn(Request $r) => $r->user());
Route::apiResource("posts", PostController::class);
});发送令牌
客户端在 Authorization 标头中以 Bearer 令牌的形式发送令牌。
# HTTP header:
Authorization: Bearer 1|AbCdEf1234567890...令牌权限范围(能力)
为令牌分配能力,以限制它们可以执行的操作。
<?php
// Create token with abilities:
$token = $user->createToken("mobile", ["read:posts", "write:comments"])->plainTextToken;
// Check ability:
if ($user->tokenCan("write:comments")) {
// allowed
}撤销令牌
删除特定令牌或所有令牌(退出所有设备)。
<?php
// Revoke current token (logout):
$request->user()->currentAccessToken()->delete();
// Revoke all tokens (logout everywhere):
$request->user()->tokens()->delete();令牌过期
在 config/sanctum.php 中设置令牌过期时间。系统会根据 last_used_at 和过期时间窗口检查令牌。
// config/sanctum.php
"expiration" => 60 * 24 * 7, // 7 days in minutesSPA 身份验证
对于同域 SPA,Sanctum 可以使用基于会话的身份验证,而不是令牌。请先调用 /sanctum/csrf-cookie,然后使用常规登录。
Sanctum 与 Passport
Sanctum:简单的 API 令牌和 SPA 身份验证。Passport:完整的 OAuth2 服务器,支持授权码、客户端凭据和刷新令牌。请从 Sanctum 开始;只有在需要 OAuth2 时才改用 Passport。
总结
Sanctum 为 API 身份验证签发 Bearer 令牌。将 HasApiTokens 添加到 User 模型。使用 auth:sanctum 保护路由。退出登录时撤销令牌。使用能力限定权限范围。
快速检查
客户端如何在 API 请求中包含 Sanctum 令牌?
常见问题解答
「使用 Laravel Sanctum 进行身份验证」课时是免费的吗?
是的 — 「使用 Laravel Sanctum 进行身份验证」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 PHP Academy 课程的其余内容,请升级到 CoddyKit PRO。 PHP Academy 课程共包含 4 节课。
「使用 Laravel Sanctum 进行身份验证」这节课中我会学到什么?
使用 Sanctum 为 SPA 和移动客户端签发并验证 API 令牌。 你通过在浏览器中直接运行的动手代码来练习 PHP Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 PHP Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 PHP Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「使用 Laravel Sanctum 进行身份验证」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 PHP Academy 课中编写并运行代码吗?
能。每节 PHP Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- API 路由与资源控制器
- API 资源与 JSON 响应
- 使用 Laravel Sanctum 进行身份验证
- 速率限制与 API 版本控制