zoukankan      html  css  js  c++  java
  • jwt laravel 使用 jwtoken jwttoken解析token jwt生成token jwt令牌验证

    本文介绍jwt token在laravel中的安装使用,解决token验证的问题

    一、查看laravel版本选定适合自己框架的jwt版本,不同版本之间会有意想不到的惊喜(坑)

    根据自己 laravel版本不同使用jwt-auth版本建议如下:

    Laravel versionjwt-auth version
    4.* 0.3.* 0.4.*
    5.* && <5.5 0.5.*
    5.* 1.0.*

    以上只是参考,本人在laravel5.4也成功使用了1.0.0-rc.3版本下面详细描述下具体的安装以及使用

    通过composer安装的两种方式

    1>composer require tymon/jwt-auth 1.0.0-rc.3(本人使用的版本)直接在项目目录下执行该命令等待安装即可

    2>打开composer.json在require中添加如下,然后执行composer update即可,但是这样会把composer.json中其他的扩展也一并更新了

    "require": {
    "tymon/jwt-auth": "1.0.0-rc.3"
    },

    将jwt加载到项目中之后进行一下配置首先

    执行命令:

    php artisan vendor:publish --provider="TymonJWTAuthProvidersLaravelServiceProvider"
    该命令的含义是发布jwt的配置文件,文件位置存储在config下该文件中存储了一系列的jwt的配置例如生存时间,token刷新时间等等创建之后执行命令
    php artisan jwt:secret,该命令为创建jwt secret秘钥在,env文件中可以看到

    然后在服务容器中创建jwt的服务提供者打开config/app.php在'providers'数组中添加

    TymonJWTAuthProvidersLaravelServiceProvider::class,或者该版本指定的添加服务提供者之后在该文件下aliases中添加门面
    'JWTAuth' => TymonJWTAuthFacadesJWTAuth::class,
    'JWTFactory' => TymonJWTAuthFacadesJWTFactory::class,
    添加门面之后在控制器中使用时可以直接 use JWTAuth;
    要想使得我们每次的接口都经受token的验证可以借助中间件,要使用中间件需要在appHttpKernel.php文件中的
    $routeMiddleware数组中添加如下:
    // jwttoken 中间件
    'jwt.auth' => TymonJWTAuthHttpMiddlewareAuthenticate::class,(该中间件则按照token规则验证)
    'jwt.refresh' => TymonJWTAuthHttpMiddlewareRefreshToken::class,(该中间件表示请求一次token就失效了)
    添加好以上配置之后我们着手控制器和模型
    在模型中
    use TymonJWTAuthContractsJWTSubject;
    class User extends Authenticatable implements JWTSubject
    并且添加以下方法
    public function getJWTIdentifier() {
    return $this->getKey();
    }
    public function getJWTCustomClaims() {
    return [];
    }

    然后需要更改下我们的auth.php配置文件因为在路由时要指定何种验证方式
    'guards' => [
    ...
    'api' => [
    'driver' => 'jwt',
    'provider' => 'users',
    ],
    ],
    更改之后路由中要这样才能生效
    Route::middleware('jwt.auth')->get('users', function () {
    return auth('api')->user();
    });
    这样路由就能经过指定的中间件jwt.auth过滤,然后经auth('api)这里指定了验证方式就是对应刚刚讲到的auth.php中的配置项
    如果你想让token的验证信息更加温暖,那么你可以捕获token验证的异常具体做法
    打开文件app/Exceptions/Handler.phprender方法开头使用如下代码
    use SymfonyComponentHttpKernelExceptionUnauthorizedHttpException;

    if ($exception instanceof UnauthorizedHttpException) {
    $preException = $exception->getPrevious();
    if ($preException instanceof
    TymonJWTAuthExceptionsTokenExpiredException) {
    return response()->json(['error' => 'TOKEN_EXPIRED']);
    } else if ($preException instanceof
    TymonJWTAuthExceptionsTokenInvalidException) {
    return response()->json(['error' => 'TOKEN_INVALID']);
    } else if ($preException instanceof
    TymonJWTAuthExceptionsTokenBlacklistedException) {
    return response()->json(['error' => 'TOKEN_BLACKLISTED']);
    }
    if ($exception->getMessage() === 'Token not provided') {
    return response()->json(['error' => 'Token not provided']);
    }
    }
    每一error都能自定义你自己的提示语
    下面是获取token的方法
    在控制器中使用use
    JWTAuth;
    读取到用户信息将用户信息作为参数例如
    $data={'mobile':12345667,'password:2342342}
    $token = JWTAuth::fromUser($data);
    这样就能拿到token
    如果我们想解析token可以使用
    JWTAuth::user()
    该方法可以将验证通过的用户信息全部提取出来
    JWTAuth.php中方法
    attempt()  尝试对用户进行身份验证并返回令牌
    authenticate()  通过令牌对用户进行身份验证
    user()       获取经过身份验证的用户


     
     
  • 相关阅读:
    iOS 在系统设置中展示Version, Build, Git等信息
    iOS10 App跳转到系统设置
    iOS UIPrintInteractionController打印
    iOS U6b3e转字符串
    Xcode8 报 ”xx“is missing from working copy 的问题解决方法
    OC学习篇之---概述 分类: IOS 2014-11-28 19:06 2349人阅读 评论(1) 收藏
    Android中插件开发篇之----类加载器 分类: Android 2014-11-24 12:15 3275人阅读 评论(4) 收藏
    Mac上安装MySql 分类: JavaWeb 2014-11-10 22:11 446人阅读 评论(0) 收藏
    Andrdoid中对应用程序的行为拦截实现方式之----从Java层进行拦截 分类: Android 2014-11-10 11:23 4311人阅读 评论(12) 收藏
    程序猿的克星 2014-11-07 18:11 4519人阅读 评论(2) 收藏
  • 原文地址:https://www.cnblogs.com/mzli/p/10637214.html
Copyright © 2011-2022 走看看