要开始使用 Laravel Sanctum,您首先需要通过 API 命令安装包:
安装 Laravel Sanctum
php artisan install:api
我们需要创建一个 AuthController 来处理用户的令牌生成。首先,使用以下命令创建控制器:
php artisan make:controller API/AuthController
然后,打开位于 的新 app/Http/Controllers/API/AuthController.php 创建的 AuthController 并添加以下代码:
<?php
namespace App\Http\Controllers\API;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\ValidationException;
class AuthController extends Controller
{
// Method to handle user authentication and token generation
public function generateToken(Request $request)
{
$request->validate([
'email' => 'required|email',
'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('my-app-token')->plainTextToken;
return response()->json(['token' => $token], 200);
}
// Method to handle user logout and token revocation
public function logout(Request $request)
{
// Revoke all tokens...
$request->user()->tokens()->delete();
// // Revoke the current token
$request->user()->currentAccessToken()->delete();
return response()->json(['message' => 'You have been successfully logged out.'], 200);
}
}
此方法验证用户的凭据,然后生成具有指定功能的新令牌。/auth/token 路由对未经身份验证的用户开放,而 /auth/logout 路由受 auth:sanctum 中间件保护,确保只有经过身份验证的用户才能访问它。我们现在就开始吧。
使用 Middleware 保护路由
Sanctum 提供了可应用于 API 路由以保护它们的中间件。这可确保只有经过身份验证的请求才能访问这些路由。
您可以通过将 auth:sanctum 中间件应用于 routes/api.php 中的路由来保护您的路由。
<?php
use App\Http\Controllers\API\UserController;
use App\Http\Controllers\API\PostController;
use App\Http\Controllers\API\AuthController;
// Public routes
Route::post('/auth/token', [AuthController::class, 'generateToken']);
Route::middleware(['auth:sanctum'])->group(function () {
// Protected User API routes
Route::get('/users', [UserController::class, 'index']);
Route::get('/users/{id}', [UserController::class, 'show']);
// Protected Post API routes
Route::get('/posts', [PostController::class, 'index']);
Route::get('/posts/{id}', [PostController::class, 'show']);
// Logout route
Route::post('/auth/logout', [AuthController::class, 'logout']);
});
使用此中间件后,只有具有有效 Sanctum 令牌的经过身份验证的请求才能访问受保护的路由。我们在之前的一篇文章中创建了这些路由,名为 Laravel 11 for Beginners: API Resources。