laravel Sanctum如何为SPA和移动应用提供认证_Laravel Sanctum SPA及移动端认证方法

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

laravel Sanctum如何为SPA和移动应用提供认证_Laravel Sanctum SPA及移动端认证方法

Laravel Sanctum 为单页应用(SPA)和移动应用提供了简洁安全的认证方案。它通过两种独立机制分别处理不同场景:基于会话的 SPA 认证和基于令牌的 API 认证。你可以根据项目需求选择使用其中一种或同时使用。

为 SPA 提供基于 Cookie 的认证

Sanctum 能让 Laravel 自身的前端或同源的 SPA 应用通过传统的会话(session)方式进行登录,享受 Laravel 原生的身份验证保护。

laravel Sanctum如何为SPA和移动应用提供认证_Laravel Sanctum SPA及移动端认证方法

AppMall应用商店

AI应用商店,提供即时交付、按需付费的人工智能应用服务

laravel Sanctum如何为SPA和移动应用提供认证_Laravel Sanctum SPA及移动端认证方法56

查看详情 laravel Sanctum如何为SPA和移动应用提供认证_Laravel Sanctum SPA及移动端认证方法

  • 安装与发布配置:先通过 composer 安装 Sanctum,然后发布其迁移文件和配置。 composer require laravel/sanctum
    php artisan vendor:publish –provider=”LaravelSanctumSanctumServiceProvider”
    接着运行迁移来创建存储令牌的表:php artisan migrate
  • 启用 SPA 中间件:在 app/http/Kernel.php 文件中,确保 ‘api’ 中间件组包含了 EnsureFrontendRequestsAreStateful 类。这个中间件负责处理来自 SPA 的有状态请求。 ‘api’ => [ LaravelSanctumHttpMiddlewareEnsureFrontendRequestsAreStateful::class, ‘throttle:60,1’, IlluminateRoutingMiddlewareSubstituteBindings::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 进行认证。

  • 准备用户模型:在你的用户模型(如 appModelsUser)中引入 HasApiTokens trait。这会为模型添加生成和管理 API 令牌的能力。 use LaravelSanctumHasApiTokens;
    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中文网其它相关文章!

上一篇
下一篇
text=ZqhQzanResources