0

0

Laravel Sanctum怎么做API认证_Laravel Sanctum令牌认证SPA和API教程

裘德小鎮的故事

裘德小鎮的故事

发布时间:2025-11-30 12:08:03

|

402人浏览过

|

来源于php中文网

原创

Laravel Sanctum 支持 SPA 和 API 认证,1. 安装并发布迁移文件;2. 配置 auth guard 为 sanctum;3. 使用 EnsureFrontendRequestsAreStateful 中间件;4. SPA 通过 web 中间件登录维持 session;5. API 可生成 Personal Access Token;6. 登出时删除 token 或销毁 session,灵活适配多场景。

laravel sanctum怎么做api认证_laravel sanctum令牌认证spa和api教程

Laravel Sanctum 提供了一种简单而强大的方式来实现 API 认证,特别适合单页应用(SPA)和移动端接口。它既可以处理传统的 token 认证,也能支持带 session 的 SPA 登录,无需 OAuth 那样复杂的流程。下面带你一步步实现 Laravel Sanctum 的 API 和 SPA 认证。

安装与配置 Sanctum

首先在 Laravel 项目中安装 Sanctum:

composer require laravel/sanctum

发布 Sanctum 的迁移文件并执行:

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

app/Http/Kernel.php 中确保 EnsureFrontendRequestsAreStateful 中间件已注册,并且你的前端域名被信任(开发环境可先忽略)。

config/auth.php 中设置默认的 guard 为 sanctum 或根据需求配置:

'defaults' => [
    'guard' => 'web',
],
'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'api' => [
        'driver' => 'sanctum',
        'provider' => 'users',
    ],
],

启用 Sanctum 中间件

在路由中使用 Sanctum 的认证机制,需要在 app/Http/Kernel.php 的中间件组中添加 \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::classapi 组,或直接在路由上使用 sanctum.auth

例如,在 routes/api.php 中:

use Illuminate\Support\Facades\Route;

Route::middleware('auth:sanctum')->group(function () {
    Route::get('/user', function (Request $request) {
        return $request->user();
    });
});

为 SPA 实现登录认证

如果你是 SPA(如 Vue + Laravel),用户通过账号密码登录获取 session,而不是 token。此时不需要手动创建 token,而是走传统的登录流程。

创建登录接口:

// routes/api.php
Route::post('/login', function (Request $request) {
    $credentials = $request->only('email', 'password');

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

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

确保登录接口在 web 中间件下才能维持 session,建议将登录、登出等放到 routes/web.php,或手动加上 web 中间件。

Open Voice OS
Open Voice OS

OpenVoiceOS是一个社区驱动的开源语音AI平台

下载

修改为:

// web.php
Route::post('/login', function (Request $request) {
    $credentials = $request->only('email', 'password');

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

    return response()->json(['message' => '凭证错误'], 401);
})->middleware('web');

前端请求时需携带 Cookie(浏览器自动处理),后续请求带上 XSRF-TOKEN 防止 CSRF。Laravel 自动设置 XSRF-TOKEN cookie,前端 Axios 可自动发送:

axios.defaults.withCredentials = true;

为 API 应用生成个人访问令牌

如果客户端是移动端或第三方应用,推荐使用 Personal Access Tokens。用户登录后创建 token 返回给客户端,后续请求携带 token 即可。

示例:用户登录并返回 token

// 控制器方法
public function login(Request $request)
{
    $request->validate([
        'email' => 'required|email',
        'password' => 'required',
    ]);

    if (!Auth::attempt($request->only('email', 'password'))) {
        return response()->json(['message' => '登录失败'], 401);
    }

    $user = $request->user();
    $token = $user->createToken('api-token')->plainTextToken;

    return response()->json(['token' => $token]);
}

客户端之后在请求头中携带 token:

Authorization: Bearer 1|abcdef123456789...

该 token 存储在 personal_access_tokens 表中,可通过 $user->tokens() 管理。

登出与 Token 注销

对于 token 登录,登出即删除当前 token:

public function logout(Request $request)
{
    $request->user()->currentAccessToken()->delete();

    return response()->json(['message' => '已登出']);
}

如果是 SPA 使用 session 登录,登出调用 Auth::logout() 并清除 session:

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

    return response()->json(['message' => '已退出']);
}

基本上就这些。Laravel Sanctum 的优势在于灵活适配不同场景,你可以同时支持 SPA 的 session 登录和 API 的 token 认证,按需选择即可。不复杂但容易忽略中间件和跨域配置,调试时注意检查 cookie、CORS 和认证 guard 设置。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2533

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1604

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1498

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

952

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1416

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1234

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1445

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1306

2023.11.13

Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

6

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Laravel---API接口
Laravel---API接口

共7课时 | 0.6万人学习

ThinkPHP6.x API接口--十天技能课堂
ThinkPHP6.x API接口--十天技能课堂

共14课时 | 1.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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