首页 >后端开发 >php教程 >使用 Laravel Sanctum 日间构建 API

使用 Laravel Sanctum 日间构建 API

Barbara Streisand
Barbara Streisand原创
2025-01-09 14:05:41936浏览

Day Building APIs with Laravel Sanctum

Laravel Sanctum:现代应用程序中 API 身份验证的简化方法。 API 对于平台间通信至关重要,Sanctum 提供了一个轻量级解决方案来保护 API,培育强大且可扩展的应用程序。本指南探讨了 Sanctum 的设置、功能和用例,包括 SPA 和基于令牌的身份验证。

了解 Laravel Sanctum

Laravel Sanctum 简化了 API 身份验证,提供了两个关键功能:

  • 基于令牌的身份验证:非常适合外部服务或移动应用程序访问的 API。
  • 基于会话的身份验证:最适合前端和后端共享同一域的单页应用程序 (SPA)。

与更复杂的解决方案不同,Sanctum 的轻量级特性和简单的配置使其非常适合没有 OAuth 要求的应用程序。

实现 Laravel Sanctum

第 1 步:安装

使用 Composer 安装 Sanctum:

<code class="language-bash">composer require laravel/sanctum</code>

第 2 步:发布配置

发布 Sanctum 配置文件:

<code class="language-bash">php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"</code>

这会生成config/sanctum.php,允许自定义 Sanctum 的设置。

第3步:数据库迁移

Sanctum 使用一张personal_access_tokens 桌子。创建此表:

<code class="language-bash">php artisan migrate</code>

第 4 步:中间件配置

将 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>

基于令牌的身份验证实践

第 1 步:路由保护

使用 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>

第 2 步:代币生成

使用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>

第 3 步:令牌撤销

撤销用户的注销令牌:

<code class="language-php">Route::post('/logout', function (Request $request) {
    $request->user()->tokens()->delete();
    return response()->json(['message' => 'Logged out successfully']);
});</code>

单页应用程序 (SPA) 集成

Sanctum 利用基于会话的 SPA 身份验证。

第 1 步:CSRF 保护

确保 EnsureFrontendRequestsAreStateful 中间件在 api 中间件组中正确配置。

第 2 步:前端配置

使用来自 SPA 的经过身份验证的 AJAX 请求发送 CSRF 令牌:

<code class="language-bash">composer require laravel/sanctum</code>

安全最佳实践

  • 令牌安全:安全地存储令牌(例如,在仅限 HTTP 的 cookie 中)并防止客户端暴露。
  • 令牌过期:实施令牌过期以减轻与泄漏令牌相关的风险。
  • 范围限制:定义令牌的特定范围以控制其权限。

结论

Laravel Sanctum 提供了一种用户友好且有效的方法来保护现代应用程序的 API。 其轻量级设计和灵活的 API 简化了开发人员的身份验证,使其成为 SPA 和基于令牌的 API 访问的宝贵工具。 在您的项目中尝试 Sanctum,以充分了解其功能。

以上是使用 Laravel Sanctum 日间构建 API的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn