0

0

使用 Laravel Sanctum 实现可选身份验证

花韻仙語

花韻仙語

发布时间:2025-09-26 17:15:10

|

687人浏览过

|

来源于php中文网

原创

使用 laravel sanctum 实现可选身份验证

本文将介绍如何在 Laravel 项目中使用 Sanctum 实现可选的身份验证。通过该方法,你可以创建一个既允许已登录用户(通过 API Token)访问,也允许未登录用户(访客)访问的路由。我们将展示如何检查请求中是否存在 Token,并根据 Token 验证结果来确定当前用户状态,从而灵活地控制访问权限。

实现可选身份验证

在某些场景下,我们需要创建一个允许匿名用户和已认证用户访问的 API 接口。例如,一个展示商品信息的接口,即使未登录的用户也可以查看,但登录用户可以查看更多个性化信息。Laravel Sanctum 默认情况下需要身份验证,但我们可以通过一些技巧来实现可选的身份验证。

核心思路是:

  1. 不使用 auth:sanctum 中间件: 避免强制要求身份验证。
  2. 检查请求头中的 Token: 判断请求是否携带 API Token。
  3. 手动验证 Token 并设置用户: 如果存在 Token,尝试使用 Sanctum 的认证守卫来验证 Token,并手动设置当前用户。

以下是具体的实现步骤:

1. 定义路由

首先,定义一个路由,并确保不使用 auth:sanctum 中间件:

Route::get('optional-auth', function () {
    // 身份验证逻辑
    if (request()->bearerToken() && $user = Auth::guard('sanctum')->user()) {
        Auth::setUser($user);
    }

    return Auth::check(); // false for guest users, true if valid token present
});

2. 实现身份验证逻辑

在路由的回调函数中,添加以下代码:

if (request()->bearerToken() && $user = Auth::guard('sanctum')->user()) {
    Auth::setUser($user);
}

return Auth::check(); // false for guest users, true if valid token present

这段代码的逻辑如下:

HaiSnap
HaiSnap

一站式AI应用开发和部署工具

下载
  • request()->bearerToken():检查请求头中是否存在 Bearer Token(API Token)。
  • Auth::guard('sanctum')->user():尝试使用 sanctum 认证守卫来验证 Token 并获取用户。如果 Token 无效,则返回 null。
  • Auth::setUser($user):如果 Token 有效,则手动设置当前用户。
  • Auth::check():返回当前用户是否已认证的状态。如果用户已认证,则返回 true,否则返回 false。

3. 测试

现在,你可以使用以下方式测试你的 API 接口:

  • 携带 API Token 的请求: GET /optional-auth,并在请求头中添加 Authorization: Bearer {your_api_token}。Auth::check() 将返回 true。
  • 不携带 API Token 的请求: GET /optional-auth。Auth::check() 将返回 false。

完整示例

以下是一个完整的示例,展示了如何使用可选身份验证来获取用户信息:

Route::get('optional-auth', function () {
    if (request()->bearerToken() && $user = Auth::guard('sanctum')->user()) {
        Auth::setUser($user);
    }

    if (Auth::check()) {
        $user = Auth::user();
        return response()->json([
            'message' => 'Authenticated user',
            'user' => $user,
        ]);
    } else {
        return response()->json([
            'message' => 'Guest user',
        ]);
    }
});

注意事项

  • 确保你已经正确配置了 Laravel Sanctum。
  • 在实际应用中,你可能需要根据用户是否已认证来执行不同的逻辑。例如,你可以根据用户是否已认证来返回不同的数据。
  • 虽然这种方法允许可选的身份验证,但仍然需要确保对敏感数据进行适当的保护。

总结

通过上述方法,你可以轻松地在 Laravel 项目中使用 Sanctum 实现可选的身份验证。这种方法可以让你创建更加灵活和易于使用的 API 接口,从而满足不同的业务需求。记住,不要使用 auth:sanctum 中间件,手动检查 Token 并设置用户。

相关专题

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

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

313

2024.04.09

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

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

270

2024.04.09

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

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

363

2024.04.09

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

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

363

2024.04.10

laravel入门教程
laravel入门教程

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

80

2025.08.05

laravel实战教程
laravel实战教程

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

63

2025.08.05

laravel面试题
laravel面试题

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

62

2025.08.05

什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

175

2024.05.11

桌面文件位置介绍
桌面文件位置介绍

本专题整合了桌面文件相关教程,阅读专题下面的文章了解更多内容。

0

2025.12.30

热门下载

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

精品课程

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

共7课时 | 0.6万人学习

PHP自制框架
PHP自制框架

共8课时 | 0.6万人学习

PHP面向对象基础课程(更新中)
PHP面向对象基础课程(更新中)

共12课时 | 0.6万人学习

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

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