Laravel Sanctum通过会话和令牌两种机制分别支持SPA和移动应用认证。安装后配置中间件与CORS,SPA可基于Cookie实现登录;移动端则通过Personal Access Token认证,用户模型引入HasApiTokens trait,登录接口生成令牌并返回,API路由使用auth:sanctum中间件验证,客户端在请求头携带Bearer Token完成认证。

Laravel Sanctum 为单页应用(SPA)和移动应用提供了简洁安全的认证方案。它通过两种独立机制分别处理不同场景:基于会话的 SPA 认证和基于令牌的 API 认证。你可以根据项目需求选择使用其中一种或同时使用。
为 SPA 提供基于 Cookie 的认证
Sanctum 能让 Laravel 自身的前端或同源的 SPA 应用通过传统的会话(session)方式进行登录,享受 Laravel 原生的身份验证保护。
-
安装与发布配置:先通过 Composer 安装 Sanctum,然后发布其迁移文件和配置。
composer require laravel/sanctum
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
接着运行迁移来创建存储令牌的表:php artisan migrate
-
启用 SPA 中间件:在 app/Http/Kernel.php 文件中,确保 'api' 中间件组包含了 EnsureFrontendRequestsAreStateful 类。这个中间件负责处理来自 SPA 的有状态请求。
'api' => [ \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'throttle:60,1', \Illuminate\Routing\Middleware\SubstituteBindings::class, ],
-
配置 CORS:修改 config/cors.php 文件,设置你的前端应用域名,并开启 supports_credentials,允许携带 Cookie。
'paths' => ['sanctum/csrf-cookie', 'api/*'], 'allowed_origins' => ['http://localhost:3000'], 'supports_credentials' => true,
-
认证流程:用户登录时,前端向 Laravel 的登录路由发送 POST 请求。Laravel 验证凭据后,通过会话将用户登录,并返回成功响应。后续请求浏览器会自动携带会话 Cookie,Sanctum 和 Laravel 会自动识别已认证用户,无需手动管理令牌。
为移动应用提供基于 Token 的认证
对于移动端或需要无状态认证的场景,Sanctum 可以颁发个人访问令牌(Personal Access Tokens),客户端在每次请求时通过 Bearer Token 进行认证。
-
准备用户模型:在你的用户模型(如 App\Models\User)中引入 HasApiTokens trait。这会为模型添加生成和管理 API 令牌的能力。
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable { use HasApiTokens; }
-
创建认证接口:建立一个登录接口。当移动端提交用户名和密码后,服务端验证信息,然后为该用户创建一个令牌并返回给客户端。
$user = User::where('email', $request->email)->first();
if ($user && Hash::check($request->password, $user->password)) { $token = $user->createToken('mobile-app')->plainTextToken; return response()->json(['token' => $token]); }
-
保护 API 路由:在需要认证的 API 路由上使用 auth:sanctum 中间件。这样,Sanctum 会检查请求头中的 Authorization: Bearer <token> 来验证用户身份。
Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); });
-
客户端操作:移动端收到令牌后,应将其安全地存储起来(如 Keychain 或 Keystore)。之后每次请求 API 时,都需在请求头中包含此令牌。用户登出时,调用一个注销接口删除当前令牌,并清除本地存储。
基本上就这些。Sanctum 的设计让你可以用一套工具灵活应对不同客户端的认证需求。
以上就是laravel Sanctum如何为SPA和移动应用提供认证_Laravel Sanctum SPA及移动端认证方法的详细内容,更多请关注php中文网其它相关文章!