Laravel Sanctum如何实现API认证_轻量级API令牌认证

裘德小鎮的故事

裘德小鎮的故事

2025-09-24

1023人浏览

原创

laravel sanctum通过api令牌实现轻量级认证,用户登录后生成令牌并用于请求头验证身份。安装需用composer引入并发布迁移文件,创建personal_access_tokens表存储令牌。user模型需引入hasapitokens trait以支持令牌管理。登录成功后调用createtoken生成明文令牌,返回时仅传递plaintexttoken。保护api路由需在api.php中使用auth:sanctum中间件,客户端请求时携带bearer格式的authorization头。支持多设备登录,每个令牌关联用户与设备,可撤销当前、指定或全部令牌。相比passport,sanctum更适用于spa和移动应用等简单场景,passport则适合需要oauth 2.0的复杂授权。可通过config/sanctum.php设置令牌有效期,重写createtoken方法自定义生成逻辑,或编写中间件扩展验证规则,满足高级认证需求。

laravel sanctum如何实现api认证_轻量级api令牌认证

Laravel Sanctum 是一种轻量级的 API 认证方案,它主要通过生成 API 令牌来实现认证。简单来说,用户登录后,可以生成一个或多个令牌,然后在请求 API 时,通过 Authorization 请求头传递令牌,Sanctum 会验证令牌的有效性,从而确定用户身份。

解决方案

  1. 安装 Sanctum:

    首先,通过 Composer 安装 Sanctum:

    composer require laravel/sanctum

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

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

    这会在数据库中创建一个 personal_access_tokens 表,用于存储 API 令牌。

  2. 配置 User 模型:

    App\Models\User 模型中,引入 HasApiTokens trait:

    namespace App\Models;
    
    use Illuminate\Foundation\Auth\User as Authenticatable;
    use Laravel\Sanctum\HasApiTokens;
    
    class User extends Authenticatable
    {
        use HasApiTokens;
    
        // ...
    }

    这个 trait 提供了生成和管理 API 令牌的方法。

  3. 生成 API 令牌:

    在用户登录或注册后,可以生成 API 令牌。例如,在登录控制器中:

    use Illuminate\Support\Facades\Auth;
    use App\Models\User;
    
    public function login(Request $request)
    {
        $credentials = $request->validate([
            'email' => 'required|email',
            'password' => 'required',
        ]);
    
        if (Auth::attempt($credentials)) {
            $user = Auth::user();
            $token = $user->createToken('auth_token')->plainTextToken;
    
            return response()->json([
                'access_token' => $token,
                'token_type' => 'Bearer',
            ]);
        }
    
        return response()->json(['message' => 'Invalid credentials'], 401);
    }

    createToken 方法会生成一个令牌,并返回包含令牌值的明文。注意,务必只在生成令牌时返回明文,之后应只存储哈希值

  4. 保护 API 路由:

    routes/api.php 文件中,使用 auth:sanctum 中间件来保护需要认证的 API 路由:

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

    现在,只有携带有效 API 令牌的请求才能访问 /api/user 路由。

  5. 发送 API 请求:

    在客户端,将 API 令牌添加到 Authorization 请求头中,格式为 Bearer {token}

    Authorization: Bearer your_api_token

    例如,使用 JavaScript 的 fetch API:

    PHP 8.5.5
    PHP 8.5.5

    PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。

    下载
    fetch('/api/user', {
        headers: {
            'Authorization': 'Bearer your_api_token',
        },
    })
    .then(response => response.json())
    .then(data => console.log(data));

Sanctum 如何处理多设备登录和令牌撤销?

Sanctum 允许用户在多个设备上生成多个令牌。每个令牌都与特定的用户和设备相关联。用户可以随时撤销某个令牌,例如,在“我的账户”页面上提供一个“注销所有设备”的选项。

撤销令牌可以通过以下方式实现:

// 撤销当前令牌
$request->user()->currentAccessToken()->delete();

// 撤销所有令牌
$request->user()->tokens()->delete();

// 撤销特定令牌
$token = $request->user()->tokens()->find($tokenId);
if ($token) {
    $token->delete();
}

Sanctum 与 Passport 的区别是什么?何时应该选择 Sanctum?

Sanctum 和 Passport 都是 Laravel 提供的 API 认证方案,但它们的应用场景不同。

  • Sanctum: 适用于单页面应用 (SPA)、移动应用和简单的 API 认证。它使用轻量级的 API 令牌,易于配置和使用。

  • Passport: 适用于需要 OAuth 2.0 授权的复杂 API 认证场景,例如第三方应用需要访问用户数据。它提供了更强大的功能,但也更复杂。

通常情况下,如果你的应用只需要简单的 API 认证,例如 SPA 或移动应用,那么 Sanctum 是一个更好的选择。如果你的应用需要 OAuth 2.0 授权,那么 Passport 更合适。

如何自定义 Sanctum 的令牌生成和验证过程?

Sanctum 提供了一些自定义选项,可以满足更高级的需求。

  • 自定义令牌有效期:

    可以在 config/sanctum.php 文件中设置令牌的有效期:

    'expiration' => 60 * 24 * 30, // 30 天
  • 自定义令牌生成逻辑:

    可以重写 HasApiTokens trait 中的 createToken 方法,来实现自定义的令牌生成逻辑。例如,可以添加额外的元数据到令牌中。

  • 自定义令牌验证逻辑:

    可以创建自定义的中间件来验证令牌,并根据需要执行额外的检查。例如,可以检查令牌是否属于特定的设备或 IP 地址。

总的来说,Laravel Sanctum 提供了一种简单而强大的 API 认证方案,可以满足大多数应用的需要。通过合理配置和自定义,可以实现更高级的认证需求。

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2024.04.09

672

10

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

2024.04.09

649

9

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2024.04.09

1112

10

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.10

1589

7

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

2025.08.05

1921

22

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

2025.08.05

1245

13

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

2025.08.05

2761

7

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

2026.03.04

1087

29

Laravel 框架安装指南
Laravel 框架安装指南

本指南详解 Laravel 框架安装全流程,涵盖 PHP 8.1+ 环境配置、Composer 依赖管理工具安装及国内镜像源优化。重点演示使用 composer create-project 命令创建 Laravel 10/11 项目,解决常见安装错误与依赖冲突。从环境搭建到项目初始化,助您快速完成 Laravel 开发环境部署,为后续 Web 应用开发奠定基础。适合 PHP 初学者与框架迁移开发者参考。

2026.04.09

91

6

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习