如何使用Laravel Sanctum对API进行身份验证 - Flixtechs
在构建 Laravel Sanctum 来保护您的 Laravel API。本文假设您对 Laravel 和 REST API 有基本的了解,并将指导您完成从项目初始化到 API 身份验证的完整流程。
前置准备
在开始之前,您需要完成以下准备工作:
- 创建一个新的 Laravel 项目,并在
.env文件中设置数据库连接。 -
安装 Laravel UI 包并生成身份验证脚手架:
composer require laravel/ui php artisan ui bootstrap --auth执行上述命令后,您将拥有一个可用的身份验证脚手架。
接下来,我们将以创建一个简单的 Todos API 为例,演示如何使用 Sanctum 实现身份验证。
第一步:创建模型和控制器
首先,创建一个 Todo 模型及其相关资源:
php artisan make:model Todo -a
上述命令会生成 Todo 模型、迁移文件、种子文件、控制器和工厂。接下来,打开迁移文件并添加以下代码:
public function up()
{
Schema::create('todos', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->boolean('complete')->default(false);
$table->timestamps();
});
}
运行迁移命令以创建数据库表:
php artisan migrate
第二步:安装 Sanctum 并配置
安装 Laravel Sanctum:
composer require laravel/sanctum
接着,发布 Sanctum 的配置文件和迁移文件:
php artisan vendor:publish --provider="LaravelSanctumSanctumServiceProvider"
php artisan migrate
在 User 模型中引入 HasApiTokens 特性:
use LaravelSanctumHasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
}
最后,在 config/auth.php 文件中,将 API 的守卫驱动设置为 sanctum:
'guards' => [
'api' => [
'driver' => 'sanctum',
'provider' => 'users',
],
],
第三步:定义路由
打开 RouteServiceProvider 文件,并取消注释 $namespace 属性:
protected $namespace = 'App\Http\Controllers';
接着,在 routes/api.php 文件中添加以下路由:
Route::post('/login', 'APIUserController@login');
Route::middleware('auth:sanctum')->group(function () {
Route::delete('/logout', 'APIUserController@logout');
Route::resource('todos', 'TodosController');
});
第四步:实现登录和注销功能
创建 UserController 控制器:
php artisan make:controller API/UserController
在 UserController 中添加以下代码:
return response()->noContent();
}
}
use AppHttpControllersController;
use IlluminateHttpRequest;
use IlluminateSupportFacadesHash;
use IlluminateValidationValidationException;
use AppModelsUser;
class UserController extends Controller
{
public function login(Request $request)
{
$request->validate([
'email' => 'required|email',
'password' => 'required',
'device_name' => '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.'],
]);
}
return response()->json([
'token' => $user->createToken($request->device_name)->plainTextToken,
]);
}
public function logout(Request $request)
{
$request->user()->currentAccessToken()->delete();
return response()->noContent();
}
}
第五步:返回 JSON 数据
为 Todo 模型生成资源类:
php artisan make:resource TodoResource
在 TodosController 中返回 JSON 数据,例如:
use AppHttpResourcesTodoResource;
use AppModelsTodo;
public function index()
{
$todos = Todo::all();
return TodoResource::collection($todos);
}
第六步:测试身份验证
您可以使用 curl 或 Postman 测试 API。以下是一些示例命令:
-
测试未授权访问:
curl http://127.0.0.1:8000/api/todos -H "Accept: application/json"返回结果:
{
"message": "Unauthenticated."
}
-
登录并获取令牌:
curl -X POST http://127.0.0.1:8000/api/login -H "Accept: application/json" -d "email=example@example.com" -d "password=yourpassword" -d "device_name=curl-client"返回结果:
{
"token": "your-generated-token"
}
- 使用令牌访问受保护的资源:
curl http://127.0.0.1:8000/api/todos -H "Accept: application/json" -H "Authorization: Bearer your-generated-token"
总结
通过本文的步骤,您已经成功使用 Laravel Sanctum 为 API 添加了身份验证功能。我们演示了如何创建模型、配置 Sanctum、定义路由以及实现登录和注销功能。最后,我们还测试了 API 的身份验证功能。
更多详细信息,请参考 Laravel 官方文档。祝您编码愉快!
原文链接: https://flixtechs.co.zw/posts/how-to-authenticate-apis-with-laravel-sanctum
最新文章
- 如何创建带有JSON响应的简单REST API
- 一文讲透MCP的原理及实践
- API安全:基于令牌的验证 vs 基于密钥的验证,哪种更可靠?
- Spring API 接口加解密
- 我们如何构建教育数据门户的API
- 2025年 GitHub 上热门 AI Agents 开源项目:AutoGen、CrewAI、OpenDevin
- api 设计入门:最佳实践与实现
- 什么是 ERT
- Grok 2 和 Grok 3 使用教程:教你如何获得Grok3的访问权限
- 深入掌握Laravel 12中使用Sanctum实现的API认证 – Kritimyantra
- 如何在 Node.js 中构建 gRPC API
- Link支付怎么注册?一站式指南