tymon/jwt-auth详解

一、背景

tymon/jwt-auth是一个基于JWT认证和Laravel框架而开发的PHP库,验证JWT令牌并通过Eloquent ORM提供对数据库支持。 JWT是在应用程序中生成,签名,并将其用作用户或客户端的身份验证标识符的 JSON 负载。

二、使用

tymon/jwt-auth是一个易于安装和使用的库,它可以轻松地为您的Laravel应用程序提供JWT认证。您需要先在您的 Laravel 应用程序中安装 tymon/jwt-auth 包,使用 Composer,以便可以轻松应用 JWT 认证。

三、安装


composer require tymon/jwt-auth
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
php artisan jwt:secret

在 config/auth.php 配置文件中配置 guards 和 providers


'guards' => [
    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ]
],

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ]
],

确保在您的 User 模型中包含 JWTSubject 受到支持的接口,以便在生成JWT令牌时包括正确的所有信息。


use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements JWTSubject
{
    // ...

    public function getJWTIdentifier()
    {
        return $this->getKey();
    }

    public function getJWTCustomClaims()
    {
        return [];
    }
}

四、认证

在jwt-auth中,认证过程主要分为两部分:生成JWT令牌和验证JWT令牌。

1、生成JWT令牌

Successful authentication will return a token string that should be sent to the client alongside their authenticated user data. This token can be used to authenticate subsequent requests to any part of your application that requires authentication.


only(['email', 'password']);
        if (!$token = Auth::attempt($credentials)) {
            return response()->json(['message' => 'Unauthorized'], 401);
        }
        return $this->respondWithToken($token);
    }

    /**
     * 返回JWT token
     * 
     * @param string $token
     * 
     * @return \Illuminate\Http\JsonResponse
     * 
     */
    protected function respondWithToken($token)
    {
        return response()->json([
            'access_token' => $token,
            'token_type' => 'bearer',
            'expires_in' => auth()->factory()->getTTL() * 60
        ]);
    }
}  
?>

2、验证JWT令牌

JWT tokens sent with requests to your application should be included in the Authorization header using the Bearer authentication scheme.


json(['users' => $users]);
    }
}  
?>

五、更多功能

1、自定义响应

可以使用JWT-auth自定义响应,只需在 config/jwt.php 配置文件中添加以下内容:


'custom' => [
    'claim_to_return' => 'value_to_return',
    'user_object' => 'App\\User',
    'some_value' => 'some_value',
],

发出响应时,JWT-auth将发布此对象:


{'some_value': 'some_value', 'claim_to_return': 'value_to_return', 'user_object': { ... }}

2、更新令牌


public function refresh() {
    $token = JWTAuth::getToken();

    try {
        $token = JWTAuth::refresh($token);
    } catch (TokenExpiredException $e) {
        throw new HttpResponseException(response()->json([
            'token_expired'
        ], $e->getStatusCode()));
    } catch (JWTException $e) {
        throw new HttpResponseException(response()->json([
            'token_invalid'
        ], $e->getStatusCode()));
    }

    return response()->json([
        'token' => $token,
        'token_type' => 'bearer',
        'expires_in' => auth()->factory()->getTTL() * 60
    ]);
}

3、各平台的Token格式


JWTAuth::fromUser($user, [
    'platform' => 'ios'
])

总结

通过学习tymon/jwt-auth和JWT认证,我们可以轻松实现Laravel API应用程序的身份验证,确保在您的API应用程序中使用保护的路由时,用户必须登录并提供正确的凭据。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/150483.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-08 14:54
下一篇 2024-11-08 14:54

相关推荐

  • JWT验证Token的实现

    本文将从以下几个方面对JWT验证Token进行详细的阐述,包括:JWT概述、JWT验证Token的意义、JWT验证Token的过程、JWT验证Token的代码实现、JWT验证Tok…

    编程 2025-04-29
  • JWT String Argument Cannot Be Null or Empty

    JWT(JSON Web Token)是一种用于进行身份验证的标准。在使用JWT时,经常会遇到“JWT String Argument Cannot Be Null or Empt…

    编程 2025-04-27
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25

发表回复

登录后才能评论