Laravel Sanctum:现代应用程序中 API 身份验证的简化方法。 API 对于平台间通信至关重要,Sanctum 提供了一个轻量级解决方案来保护 API,培育强大且可扩展的应用程序。本指南探讨了 Sanctum 的设置、功能和用例,包括 SPA 和基于令牌的身份验证。
Laravel Sanctum 简化了 API 身份验证,提供了两个关键功能:
与更复杂的解决方案不同,Sanctum 的轻量级特性和简单的配置使其非常适合没有 OAuth 要求的应用程序。
使用 Composer 安装 Sanctum:
<code class="language-bash">composer require laravel/sanctum</code>
发布 Sanctum 配置文件:
<code class="language-bash">php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"</code>
这会生成config/sanctum.php
,允许自定义 Sanctum 的设置。
Sanctum 使用一张personal_access_tokens
桌子。创建此表:
<code class="language-bash">php artisan migrate</code>
将 Sanctum 的中间件集成到 api
内的 app/Http/Kernel.php
中间件组:
<code class="language-php">'api' => [ \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ],</code>
使用 routes/api.php
中间件确保 auth:sanctum
中的路由安全:
<code class="language-php">use Illuminate\Support\Facades\Route; Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); });</code>
使用createToken
方法生成个人访问令牌:
<code class="language-php">use App\Models\User; use Illuminate\Http\Request; Route::post('/login', function (Request $request) { $user = User::where('email', $request->email)->first(); if (! $user || ! Hash::check($request->password, $user->password)) { return response()->json(['message' => 'Invalid credentials'], 401); } return $user->createToken('auth_token')->plainTextToken; });</code>
撤销用户的注销令牌:
<code class="language-php">Route::post('/logout', function (Request $request) { $request->user()->tokens()->delete(); return response()->json(['message' => 'Logged out successfully']); });</code>
Sanctum 利用基于会话的 SPA 身份验证。
确保 EnsureFrontendRequestsAreStateful
中间件在 api
中间件组中正确配置。
使用来自 SPA 的经过身份验证的 AJAX 请求发送 CSRF 令牌:
<code class="language-bash">composer require laravel/sanctum</code>
Laravel Sanctum 提供了一种用户友好且有效的方法来保护现代应用程序的 API。 其轻量级设计和灵活的 API 简化了开发人员的身份验证,使其成为 SPA 和基于令牌的 API 访问的宝贵工具。 在您的项目中尝试 Sanctum,以充分了解其功能。
以上是使用 Laravel Sanctum 日间构建 API的详细内容。更多信息请关注PHP中文网其他相关文章!