首页 > php框架 > Laravel > 正文

Laravel Sanctum怎么为SPA应用提供API认证

下次还敢
发布: 2025-11-08 23:31:02
原创
703人浏览过
Laravel Sanctum通过session机制为SPA提供轻量认证。1. 安装并发布配置文件,运行迁移;2. 配置CORS允许前端域名携带cookie;3. 前端先获取CSRF token再登录;4. 用auth:sanctum中间件保护API;5. 登出时清除session。关键在于正确配置跨域和CSRF处理。

laravel sanctum怎么为spa应用提供api认证

Laravel Sanctum 为单页应用(SPA)与 Laravel 后端 API 提供简单、轻量的认证机制,无需传统的 API token 或 OAuth。它结合了 Laravel 的 session 认证机制和跨域支持,让 SPA 能安全地调用后端 API。

1. 安装并配置 Sanctum

使用 Composer 安装 Sanctum:

composer require laravel/sanctum

发布 Sanctum 的配置和迁移文件:

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

运行迁移以创建 sessions 表(用于记录用户登录状态):

php artisan migrate

app/Http/Kernel.php 中确保 EnsureFrontendRequestsAreStateful 中间件已注册到 api 中间件组中,这是支持 SPA 跨域请求的关键:

'api' => [
    \Illuminate\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
    'throttle:api',
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
],
登录后复制

2. 配置跨域(CORS)

确保前端域名被允许携带 cookie 发起请求。修改 config/cors.php

'paths' => ['sanctum/csrf-cookie', 'api/*'],
'supports_credentials' => true,
'allowed_origins' => ['http://localhost:3000'], // 前端地址
登录后复制

这允许前端获取 CSRF cookie 并保持会话状态。

3. 用户登录与认证流程

Sanctum 使用 Laravel 默认的 session 认证方式。你需要提供登录接口:

AppMall应用商店
AppMall应用商店

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

AppMall应用商店 56
查看详情 AppMall应用商店
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

public function login(Request $request)
{
    $credentials = $request->only('email', 'password');

    if (Auth::attempt($credentials)) {
        return response()->json(['message' => '登录成功']);
    }

    return response()->json(['message' => '凭证错误'], 401);
}
登录后复制

前端必须先访问 /sanctum/csrf-cookie 接口来获取 CSRF token:

axios.get('/sanctum/csrf-cookie');
登录后复制

然后才能提交登录请求,避免 CSRF 校验失败。

4. 保护 API 路由

使用 auth:sanctum 中间件保护需要认证的 API:

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});
登录后复制

只要用户已登录且 session 有效,该接口就会返回当前用户信息。

注意:由于是基于 session 的认证,用户关闭浏览器或 session 过期后需要重新登录。

5. 登出操作

登出时清除 session 并可选地使 token 失效(如果也用了 token):

use Illuminate\Http\Request;

public function logout(Request $request)
{
    Auth::guard('web')->logout();
    $request->session()->invalidate();
    $request->session()->regenerateToken();

    return response()->json(['message' => '已退出']);
}
登录后复制

基本上就这些。Laravel Sanctum 为 SPA 提供了一种简洁、安全的认证方式,无需管理 token,适合同域或可信跨域场景。关键点在于正确配置 CORS 和确保前端获取 CSRF cookie。不复杂但容易忽略细节。

以上就是Laravel Sanctum怎么为SPA应用提供API认证的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号