jerrygaoyang/laravel-jwt

用于编码、解码、设置token过期时间和验证的jwt auth

v1.0.5 2017-11-21 02:15 UTC

This package is not auto-updated.

Last update: 2024-09-18 04:28:40 UTC


README

安装

  • 首先:使用以下命令通过composer安装此包

composer require jerrygaoyang/laravel-jwt

  • 其次:将服务提供者添加到config/app.php中的providers数组中

Jerry\JWT\Providers\JWTProvider::class

  • 最后:将jwt配置发布到Laravel配置路径

php artisan vendor:publish --provider="Jerry\JWT\Providers\JWTProvider"

配置

  • 将JWT中间件添加到app/Http/Kenel.php中的routeMiddleware数组中

'jwt' => \Jerry\JWT\Middleware\JWTMiddleware::class,

  • JWT配置在config/jwt.php中
<?php
/**
 * Created by PhpStorm.
 * User: gaoyang
 * Date: 2017/11/14
 * Time: 9:32
 */

return [
    "secret" => "PIe5T3xJWAMA95Uwf7pde7gmS7ZTiURg",   //jwt SHA256 signature use the secret
    "expire_in" => 604800,                            //jwt expire_in the times(seconds) , default 604800(a week)
];

用户指南

编码和解码

use Jerry/JWT/JWT;

$payload = [
  "user_id" => 1
];

$token = JWT::encode($payload);
print_r($token);

echo "<br>";

$payload = JWT::decode($token);
print_r($payload);

laravel的http api处理

  • 首先:http请求必须包含header头
{
    "Authorization": "jwt PIe5T3xJWAMA95Uwf7pde7gmS7ZTiURg"
}	
  • 其次:laravel路由使用jwt中间件
Route::middleware(['jwt'])->group(function () {
    Route::get('/test2', 'TestController@test2');
});
  • 最后:用户请求在您的laravel控制器中获取jwt解码后的负载
$payload = $request->get('jwt');

异常(全局用于api)

您可以将以下代码复制到您的Laravel app/Exceptions/handler.php的render函数中;

很容易更改令牌异常以供我们使用;

很容易更改返回数据以供api响应使用。

当然,我们应该

使用Jerry\JWT\Exceptions\TokenFormatException;

使用Jerry\JWT\Exceptions\TokenExpiredException;

使用Jerry\JWT\Exceptions\TokenForwardException;

使用Jerry\JWT\Exceptions\PayloadFormatException;

	if ($exception instanceof TokenFormatException) {
            return response()->json([
                'code' => $exception->getCode(),
                'message' => $exception->getMessage(),
                'data' => ''
            ]);
        }
        if ($exception instanceof TokenExpiredException) {
            return response()->json([
                'code' => $exception->getCode(),
                'message' => $exception->getMessage(),
                'data' => ''
            ]);
        }
        if ($exception instanceof TokenForwardException) {
            return response()->json([
                'code' => $exception->getCode(),
                'message' => $exception->getMessage(),
                'data' => ''
            ]);
        }
        if ($exception instanceof PayloadFormatException) {
            return response()->json([
                'code' => $exception->getCode(),
                'message' => $exception->getMessage(),
                'data' => ''
            ]);
        }