Laravel中Token的实现机制是什么

这篇文章主要介绍“Laravel中Token的实现机制是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“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的实现机制是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注创新互联行业资讯频道,小编每天都会为大家更新不同的知识点。


分享名称:Laravel中Token的实现机制是什么
文章链接:http://myzitong.com/article/iggssj.html