Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
Laravel Sanctum如何实现API认证_轻量级API令牌认证_创想鸟

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

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 会验证令牌的有效性,从而确定用户身份。

解决方案

安装 Sanctum:

首先,通过 Composer 安装 Sanctum:

composer require laravel/sanctum

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

php artisan vendor:publish --provider="LaravelSanctumSanctumServiceProvider"php artisan migrate

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

配置 User 模型:

AppModelsUser 模型中,引入 HasApiTokens trait:

namespace AppModels;use IlluminateFoundationAuthUser as Authenticatable;use LaravelSanctumHasApiTokens;class User extends Authenticatable{    use HasApiTokens;    // ...}

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

生成 API 令牌:

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

use IlluminateSupportFacadesAuth;use AppModelsUser;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 方法会生成一个令牌,并返回包含令牌值的明文。注意,务必只在生成令牌时返回明文,之后应只存储哈希值

保护 API 路由:

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

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

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

发送 API 请求:

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

Authorization: Bearer your_api_token

例如,使用 JavaScript 的 fetch API:

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 认证方案,可以满足大多数应用的需要。通过合理配置和自定义,可以实现更高级的认证需求。

以上就是Laravel Sanctum如何实现API认证_轻量级API令牌认证的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/196704.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
鉴定师APP怎么找回密码_鉴定师APP密码找回与重置流程说明
上一篇 2026年9月9日 23:57:21
iPhoneAireSIM卡怎么转移到新设备_iPhoneAireSIM卡转移的详细步骤
下一篇 2026年9月10日 00:01:37

相关推荐

  • 构建VSCode多媒体编程界面与实时音视频处理

    答案:VSCode通过配置Node.js、Python扩展及FFmpeg等工具,结合OpenCV、PyAudio等框架,可构建高效音视频处理环境。1. 安装Python和Node.js支持,启用Pylance、Jupyter插件提升数据处理体验;2. 配置终端与Code Runner实现脚本一键执行…

    2026年9月22日
    000
  • 在Java中如何开发简易问答社区

    答案是Java结合Spring Boot可快速构建问答社区,通过设计questions、answers、users三张表实现数据存储,使用JPA进行持久化,前端用HTML+JS调用后端API完成用户提问、回答、查看与互动功能。 开发一个简易问答社区,核心是实现用户提问、回答、查看问题和互动功能。Ja…

    2026年9月22日
    100
  • PHP 数组元素按日期条件过滤与删除:避免常见陷阱

    本教程详细介绍了如何在 PHP 中根据日期条件动态删除数组(或对象数组)中的元素。文章将重点讲解如何正确进行日期比较,特别是当数据源为 JSON 格式时,以及 unset 函数在遍历过程中移除元素时的正确用法,帮助开发者避免常见的字符串日期比较和对象属性访问错误。 简介 在数据处理中,根据特定条件过…

    2026年9月22日
    000
  • linux系统下codeblocks控制台打印中文乱码[通俗易懂]

    linux系统下codeblocks控制台打印中文乱码[通俗易懂]linux系统下codeblocks控制台打印中文乱码[通俗易懂]linux系统下codeblocks控制台打印中文乱码[通俗易懂]linux系统下codeblocks控制台打印中文乱码[通俗易懂]

    大家好,很高兴再次和大家见面,我是你们的朋友全栈君。 在Linux系统下使用CodeBlocks时,如果在控制台中打印中文可能会遇到乱码问题。以下是解决这一问题的详细步骤: 首先,我们来看一下在Linux系统下安装CodeBlocks后,运行以下代码时出现的问题: #include #include…

    2026年9月22日 用户投稿
    600
  • 解决Android设备管理移除时的SecurityException

    本文将详细介绍如何解决在尝试从Android设备移除设备管理员时遇到的java.lang.SecurityException异常。该异常通常发生在尝试移除一个非测试用途的设备管理员应用时。通过修改应用的配置,将其临时标记为测试应用,可以绕过此安全限制,从而成功移除设备管理员。请务必注意,这种方法仅适…

    2026年9月22日
    100
  • MySQL SHOW 语句与预处理参数绑定:深入解析与解决方案

    本文深入探讨了在PHP PDO中尝试使用参数绑定执行SHOW VARIABLES LIKE :var查询时遇到的常见问题。核心原因是MySQL对SHOW类语句的预处理存在限制,导致无法直接绑定参数。文章提供了多种有效的替代方案,包括字符串拼接(需注意安全)以及更推荐的通过WHERE variable…

    2026年9月22日
    400
  • Java类中Jackson @JsonNaming策略的运行时内省

    本文介绍如何在运行时动态内省Java类上通过@JsonNaming注解配置的Jackson PropertyNamingStrategy。通过利用ObjectMapper的SerializationConfig和JacksonAnnotationIntrospector,开发者可以编程方式获取类的命…

    2026年9月22日
    600
  • Workerman与PHP协同开发:构建高性能的Web应用程序

    workerman与php协同开发:构建高性能的web应用程序 引言:在今天互联网高速发展的时代,Web应用程序的高性能已成为用户体验和竞争力的重要因素。而PHP作为一种广泛使用的服务器端开发语言,其性能优化一直备受关注。本文将介绍如何利用Workerman与PHP协同开发,从而构建高性能的Web应…

    用户投稿 2026年9月22日
    000
  • 解决PHP扩展缺失错误:phpinfo验证与服务重启指南

    本文旨在解决%ignore_a_1%脚本运行时提示特定扩展(如json、mbstring)缺失的问题,即便用户已在php配置中手动启用。核心解决方案是利用`phpinfo()`函数验证扩展的实际加载状态,并强调在修改php配置后,必须重启相关的web服务器或php-fpm服务,以确保新的配置生效。 …

    2026年9月22日
    300
  • 高效利用 PriorityQueue 合并并排序多个列表

    本教程详细阐述了如何使用 Java 的 PriorityQueue 高效地合并并排序多个整数列表。文章首先指出将列表作为元素放入 PriorityQueue 的常见误区,进而纠正为应将单个整数元素放入队列。接着,它演示了如何正确声明、填充 PriorityQueue,并强调了通过循环调用 poll(…

    2026年9月22日
    400
  • PHP数组中JSON字符串值的解析与访问教程

    本教程将详细指导如何在PHP中处理包含JSON字符串的数组。通过利用json_decode()函数,您可以轻松地将这些JSON字符串转换为可操作的PHP数组,进而提取并访问其中嵌套的shortname、fullname等具体字段,从而实现对复杂数据结构的有效管理和利用。 理解问题:PHP数组中的JS…

    2026年9月22日
    000
  • 如何配置Android开发环境 Android Studio安装与JDK配置方法

    答案:配置Android开发环境需先安装JDK并设置环境变量,再下载安装Android Studio,配置SDK及虚拟设备,最后创建项目测试。具体步骤包括:1. 安装JDK 17并配置JAVA_HOME和Path;2. 从官网下载Android Studio并安装,自动集成SDK;3. 通过SDK …

    2026年9月22日
    200
  • 递增操作符对PHP类静态属性的影响_PHP静态属性递增行为

    静态属性在PHP中被类的所有实例共享,使用++操作符递增时会修改唯一的内存副本。例如定义计数器属性 $count,每次调用 increment() 方法均使其加1,无论通过哪个对象实例。这种机制适用于统计对象创建次数、追踪全局状态等场景。由于静态属性生命周期贯穿整个请求,递增值持续累积,可能导致内存…

    2026年9月22日
    100
  • 谷歌浏览器官网直接进入 Chrome浏览器官方登录入口

    谷歌浏览器官网直接进入方式为访问https://www.google.com/chrome/,该网站是Chrome官方登录入口,提供跨平台同步、V8引擎加速、地址栏集成搜索、自动填充表单等核心功能,支持极简界面、深色模式、自定义新标签页及侧边栏服务,具备安全浏览、隐私沙盒、密码检查和无痕模式等安全机…

    2026年9月22日
    200
  • 在月球上用肉眼能清晰地看到长城吗?蚂蚁庄园今日答案最新10.24

    或许有的用户还不知道在月球上用肉眼能清晰地看到长城吗?蚂蚁庄园今日答案最新10.24,下面让php的小编为你解答这个问题,快来看看吧! 立即进入“各种好用的网站推荐☜☜☜☜☜点击进入”; 蚂蚁庄园非常好玩,养鸡的同时还能做慈善,增进知识的同时还可以免费领取小鸡饲料。 蚂蚁庄园课堂今天的问题是: 在月…

    2026年9月22日
    900
  • Laravel 8 注册成功但登录失败的解决方案

    本文针对 Laravel 8 中使用 php artisan ui:auth 生成的认证系统,注册功能正常但登录功能失效的问题,提供了一种解决方案。通过重写 LoginController 中的 username() 方法,将认证字段从默认的 email 修改为 username,从而解决登录失败的…

    2026年9月22日
    100
  • 一杯热水在变凉的过程中温度是匀速下降的吗?蚂蚁庄园课堂今天答案最新10月24日

    肯定有许多的童鞋想明白一杯热水在变凉的过程中温度是匀速下降的吗?蚂蚁庄园课堂今天答案最新10月24日,下面由php的小编为你带来答案哦,跟小编一起来看看哦。 立即进入“各种好用的网站推荐☜☜☜☜☜点击进入”; 蚂蚁庄园非常好玩,养鸡的同时还能做慈善,增进知识的同时还可以免费领取小鸡饲料。 蚂蚁庄园课…

    2026年9月22日
    2300
  • laravel+redis有哪些用法

    laravel+redis有用法有:1、使用Redis作为缓存驱动器;2、使用Laravel提供的缓存操作方法来操作Redis缓存;3、使用Redis作为数据存储系统,Laravel提供了与Redis交互的方法,使我们能够方便地进行数据存储和读取;4、还提供了其他高级功能,如发布订阅、事务和管道等,…

    2026年9月22日
    700
  • unix怎么安装php_unix系统安装php环境指南

    首先确认系统环境并检查是否已安装相关软件,然后选择包管理器或源码编译方式安装PHP;推荐使用包管理器快速安装,如Debian/Ubuntu用apt,CentOS/RHEL/Fedora用yum或dnf,FreeBSD用pkg;安装后配置Web服务器,Apache需加载mod_php或集成PHP-FP…

    2026年9月22日
    300
  • 消逝的光芒困兽中文奖杯列表一览 奖杯全收集图鉴

    消逝的光芒困兽中文奖杯列表一览 奖杯全收集图鉴消逝的光芒困兽中文奖杯列表一览 奖杯全收集图鉴消逝的光芒困兽中文奖杯列表一览 奖杯全收集图鉴消逝的光芒困兽中文奖杯列表一览 奖杯全收集图鉴

    《消逝的光芒困兽》游戏中,一共有31个奖杯,15个铜杯、9个银杯、6个金杯和1个白金奖杯。本篇攻略就为大家带来中文奖杯列表一览。 消逝的光芒困兽中文奖杯列表一览 野兽出笼 解锁全部奖杯 逃出生天 逃出男爵的地堡 路见不平 在市政厅救出幸存者 闭门不出 发现男爵搞的破坏 固执己见 被大山压在头上 千里…

    2026年9月22日 用户投稿
    600

发表回复

登录后才能评论
关注微信