首页 php框架 Laravel 一文介绍Laravel中Token的实现机制

一文介绍Laravel中Token的实现机制

Apr 23, 2023 am 09:13 AM

Laravel是一个使用PHP编程语言开发的Web应用框架,它的卓越表现得益于其内部集成大量功能强大的扩展包。其中就包括了Token的底层实现。Token,即令牌,是Web应用程序常用的一种身份验证方式,通常用于保护API和Web服务免受非法访问。在这篇文章中,我们将介绍Laravel中Token的实现机制。

一、令牌的概念

Token,顾名思义,就是指一种令牌,是一种标记,可以代表某种身份信息或者授权信息。它通常由服务器产生并发放给客户端,客户端收到令牌后将其存放在本地,在后续请求时加入请求头或者请求参数中,作为身份验证或授权的标识。服务器通过检查令牌是否有效,就可以确定请求是否具有身份验证或者授权信息。

令牌的使用能够更有效地保护Web应用免受未经授权的访问,尤其是在API和Web服务中,令牌是必不可少的。

二、 Laravel Token的实现

Laravel作为一款优秀的Web应用框架,在其内置的Auth功能中提供了Token的支持。在Laravel中,Token的实现使用了Laravel Sanctum这个扩展包。

2.1 Laravel Sanctum

Laravel Sanctum是一款轻量级的身份验证包,可以为Laravel应用程序提供API身份验证,基于API秘钥或者Token,让应用程序更好的运行在无状态环境中,如SPA应用程序、单页应用程序和移动应用程序等。Laravel Sanctum提供了以下功能:

  1. 无需配置即可开始使用;
  2. 支持使用session、Token以及API秘钥等多种身份验证方式;
  3. 内置了多种身份验证的实现,如cookie、Token、auth等;
  4. 提供了方便的身份验证和Token生成;
  5. 更好的自定义身份验证流程。

2.2 Token的实现原理

在Laravel Sanctum中,Token的实现原理与session实现原理类似。在请求中,客户端向服务器发出请求时,将Token作为请求参数或Header中的Authorization字段发送给服务器。服务器在检查Token是否有效,并在有效期内,给予请求操作的权限或者返回错误信息。Token的实现流程如下:

  1. 创建Token:当用户登录时,Sanctum将为该用户生成一个随机的Token,并将该Token保存在后台数据库中;
  2. 发送Token:将Token作为请求参数或者Header中的Authorization字段发送给服务器;
  3. Token验证:在服务器端,Sanctum将检查接收到的Token是否有效,并决定授权或拒绝;
  4. Tokens管理:Sanctum提供了一系列API来创建、撤销、查找和验证Token。

三、 Laravel Token的使用

Sanctum提供了方便易用的API来使用Token,包括Token的创建、撤销、查找和验证等。下面是Token的使用方式:

3.1 安装 Sanctum

在应用程序中,首先需要将Sanctum的依赖包引入到应用的composer.json文件:

composer require laravel/sanctum
登录后复制

安装完成后,需要在config/app.php文件中添加如下配置:

'providers' => [ 
    // Other service providers... 
    Laravel\Sanctum\SanctumServiceProvider::class, 
],
登录后复制

3.2 发布配置

在安装完成后,需要运行以下命令来发布Sanctum的配置文件:

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
登录后复制

3.3 配置Middleware

在使用Sanctum时,需要在对应的路由中添加中间件。在Laravel中,已经内置了API认证的中间件,可以直接调用。

3.4 创建Token

在登录后,可以使用如下代码来为当前用户创建Token:

use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Hash; 
use Illuminate\Validation\ValidationException; 
use App\Models\User; 
use Illuminate\Support\Facades\Auth; 
use Illuminate\Support\Facades\Route; 

// 创建Token 
Route::post('/api/token/create', function (Request $request) { 
    $request->validate([ 
        'email' => 'required|email', 
        'password' => 'required', 
    ]); 

    $user = User::where('email', $request->email)->first(); 

    if (! $user || ! Hash::check($request->password, $user->password)) { 
        throw ValidationException::withMessages([ 
            'email' => ['The provided credentials are incorrect.'], 
        ]); 
    } 

    return $user->createToken($request->header('User-Agent'))->plainTextToken; 
});
登录后复制

在上面的代码中,可以看到在创建Token时,使用机器的User-Agent作为额外的参数。这里的User-Agent是一个HTTP头,记录了浏览器或应用程序的相关信息。这个信息将作为Token的一部分,使得Token一旦被盗用或者恶意使用,可以很容易地发现和撤销。

3.5 撤销Token

创建的Token一旦被盗用或者失效,可以使用如下代码撤销:

Auth::user()->tokens()->delete();
登录后复制

3.6 验证扩展

Sanctum还提供了良好的验证扩展,可以方便地进行访问控制,代码如下:

use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Hash; 
use Illuminate\Validation\ValidationException; 
use App\Models\User; 
use Illuminate\Support\Facades\Auth; 
use Illuminate\Support\Facades\Route; 
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable 
{
    use HasApiTokens, Notifiable;
}
登录后复制

使用上述代码之后,我们就可以在User模型中使用can接口来进行访问控制,代码如下:

$request->user()->can('update', $post);
登录后复制

在上面的代码中,can将根据当前用户的角色、权限和策略,判断用户是否有权进行更新操作。需要注意的是,用户需要正确实现自己的访问控制逻辑。

四、 总结

在本文中,我们介绍了Laravel中Token的底层实现机制,尤其是使用Sanctum扩展包的方式。Sanctum提供了方便易用的API,能够快速集成到应用程序中,并提高应用程序的安全性。Token的使用方式、创建、撤销和管理,以及访问控制等方面均进行了详细的讲解。

在今天的互联网世界中,随着API和Web服务的广泛应用,Token作为一种身份验证方式,将在很多应用程序中得到更加广泛的应用。Laravel框架提供了良好的Token实现机制,可以更好地保护Web应用免受非法访问。

以上是一文介绍Laravel中Token的实现机制的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1662
14
CakePHP 教程
1419
52
Laravel 教程
1313
25
PHP教程
1262
29
C# 教程
1235
24
laravel入门实例 laravel入门实例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用于轻松构建 Web 应用程序。它提供一系列强大的功能,包括:安装: 使用 Composer 全局安装 Laravel CLI,并在项目目录中创建应用程序。路由: 在 routes/web.php 中定义 URL 和处理函数之间的关系。视图: 在 resources/views 中创建视图以呈现应用程序的界面。数据库集成: 提供与 MySQL 等数据库的开箱即用集成,并使用迁移来创建和修改表。模型和控制器: 模型表示数据库实体,控制器处理 HTTP 请求。

laravel用户登录功能 laravel用户登录功能 Apr 18, 2025 pm 12:48 PM

Laravel 提供了一个全面的 Auth 框架,用于实现用户登录功能,包括:定义用户模型(Eloquent 模型)创建登录表单(Blade 模板引擎)编写登录控制器(继承 Auth\LoginController)验证登录请求(Auth::attempt)登录成功后重定向(redirect)考虑安全因素:哈希密码、防 CSRF 保护、速率限制和安全标头。此外,Auth 框架还提供重置密码、注册和验证电子邮件等功能。详情请参阅 Laravel 文档:https://laravel.com/doc

Laravel和后端:为Web应用程序提供动力逻辑 Laravel和后端:为Web应用程序提供动力逻辑 Apr 11, 2025 am 11:29 AM

Laravel是如何在后端逻辑中发挥作用的?它通过路由系统、EloquentORM、认证与授权、事件与监听器以及性能优化来简化和增强后端开发。1.路由系统允许定义URL结构和请求处理逻辑。2.EloquentORM简化数据库交互。3.认证与授权系统便于用户管理。4.事件与监听器实现松耦合代码结构。5.性能优化通过缓存和队列提高应用效率。

laravel框架安装方法 laravel框架安装方法 Apr 18, 2025 pm 12:54 PM

文章摘要:本文提供了详细分步说明,指导读者如何轻松安装 Laravel 框架。Laravel 是一个功能强大的 PHP 框架,它 упростил 和加快了 web 应用程序的开发过程。本教程涵盖了从系统要求到配置数据库和设置路由等各个方面的安装过程。通过遵循这些步骤,读者可以快速高效地为他们的 Laravel 项目打下坚实的基础。

Laravel如何学习 怎么免费学习Laravel Laravel如何学习 怎么免费学习Laravel Apr 18, 2025 pm 12:51 PM

想要学习 Laravel 框架,但苦于没有资源或经济压力?本文为你提供了免费学习 Laravel 的途径,教你如何利用网络平台、文档和社区论坛等资源,从入门到掌握,为你的 PHP 开发之旅奠定坚实基础。

laravel怎么查看版本号 laravel查看版本号方法 laravel怎么查看版本号 laravel查看版本号方法 Apr 18, 2025 pm 01:00 PM

Laravel框架内置了多种方法来方便地查看其版本号,满足开发者的不同需求。本文将探讨这些方法,包括使用Composer命令行工具、访问.env文件或通过PHP代码获取版本信息。这些方法对于维护和管理Laravel应用程序的版本控制至关重要。

laravel有哪些版本 laravel新手版本选择方法 laravel有哪些版本 laravel新手版本选择方法 Apr 18, 2025 pm 01:03 PM

在面向初学者的 Laravel 框架版本选择指南中,本文深入探讨了 Laravel 的版本差异,旨在协助初学者在众多版本之间做出明智的选择。我们将重点介绍每个版本的关键特征、比较它们的优缺点,并提供有用的建议,帮助新手根据他们的技能水准和项目需求挑选最合适的 Laravel 版本。对于初学者来说,选择一个合适的 Laravel 版本至关重要,因为它可以显著影响他们的学习曲线和整体开发体验。

laravel和thinkphp的区别 laravel和thinkphp的区别 Apr 18, 2025 pm 01:09 PM

Laravel 和 ThinkPHP 都是流行的 PHP 框架,在开发中各有优缺点。本文将深入比较这两者,重点介绍它们的架构、特性和性能差异,以帮助开发者根据其特定项目需求做出明智的选择。

See all articles