qufo/jwt

简单的Json Web Token工具包

dev-master 2016-12-23 16:28 UTC

This package is not auto-updated.

Last update: 2024-09-28 19:58:06 UTC


README

为Lumen提供的简单JSON Web Token工具包。

安装

    "qufo/jwt":"dev-master"

添加到您的composer.json文件中,并运行composer update。

配置

将以下内容添加到您的.env文件中,例如

[JWT]
JWT_SECRET=YOURSECRETWITH32CHARSET
JWT_ALGO=SHA256
JWT_ENABLE=true
JWT_TTL=60
JWT_REFRESH_TTL=60

$app->register(Qufo\JWT\Provider\LumenServiceProvider::class);

添加到您的bootstrap/app.php中。

如何使用

  1. 首先在任何代码位置构建一个令牌,例如
    $jwt_token = \Qufo\JWT\JWT::encode($payload);

并将其发送给客户端,以便客户端可以获取并记住它。

  1. 在app/Http/Middleware中创建一个名为JWTAuth的中介件
<?php
/**
 * JWT
 */

namespace App\Http\Middleware;
use Closure;

class JWTAuth
{

    /**
     *  JWT Middleware
     * @param Request $request
     * @param Closure $next
     * @return \Illuminate\Http\Response|\Laravel\Lumen\Http\ResponseFactory
     */
    public function handle($request, Closure $next)
    {
        // if JWT ENABLE ?
        if (!env('JWT_ENABLE',false)) {
            return $next($request);
        }

        // Check Token
        $bearerToken = $request->bearerToken();
        $bearerToken = $bearerToken?:$request->input('access_token',false);
        if ($bearerToken) {
            try {
                $token = $this->decodeToken($bearerToken);
                $request->merge(['jwt'=>$token]);
                return $next($request);
            } catch (\Exception $e) {
                return response(['message'=>$e->getMessage(),'status_code'=>$e->getCode()],403);
            }
        } else {
            return response(['message'=>'Unauthorized,Bearer token seemed not exists.','status_code'=>401],401);
        }
    }

    /**
     * Decode Token
     * @param $bearerToken
     * @return mixed
     * @throws \Exception
     */
    private function decodeToken($bearerToken){
        $token_s = \Qufo\JWT\JWT::Base64UrlDecode($bearerToken);
        try {
            $token = \Qufo\JWT\JWT::decode($token_s);
            return $token;
        } catch (\Exception $e) {
            throw new \Exception($e->getMessage(),403);
        }
    }
}
$app->routeMiddleware([
    'jwt.auth'  => 'App\Http\Middleware\JWTAuth',
]);

添加到您的bootstrap/app.php中。

  1. 修改您的routes.php文件
$app->group(['middleware'=>'jwt.auth'],function() use ($app){
   //Your Routes Protected by JWT Auth.
});

其他内容

这是一个“简单”的JWT,所以src/JWT.php中只有一个核心文件。并且,它只支持SHA256、SHA512和SHA384,您可以在.env文件中将其更改为您想要的。