最近项目做API认证,最终技术选型决定使用JWT,项目框架使用的是laravel,laravel使用JWT有比较方便使用的开源包:jwt-auth。php 后端实现JWT认证方法

使用composer安装jwt-auth,laravel使用的框架版本为5.0,jwt-auth最新稳定版本为0.5.12。(最新版为1.0.*,需laravel5.4以上)


composer require tymon/jwt-auth 0.5.*

安装完成后,需要在config/app.php中注册相应的服务提供者:

'providers' => [
'Tymon\JWTAuth\Providers\JWTAuthServiceProvider',
],

然后注册需要用到的对应门面:

'aliases' => [
'JWTAuth' => 'Tymon\JWTAuth\Facades\JWTAuth',
'JWTFactory' => 'Tymon\JWTAuth\Facades\JWTFactory',
],

然后发布相应配置文件:此命令会在 config 目录下生成一个 jwt.php 配置文件,你可以在此进行自定义配置。

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"

最后生成密钥:此命令会在你的 .env 文件中新增一行 JWT_SECRET=secret

php artisan jwt:generate

生成TOKEN,生成TOKEN有多种方式:下面介绍两种
一、根据模型为基础生成TOKEN:


根据模型生成TOKEN需在config/auth.php指定使用哪个模型。

'model' => 'App\Models\Members',

在模型文件Members.php中需添加

namespace App\Models; use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Authenticatable;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; class Members extends Model implements AuthenticatableContract
{
use Authenticatable;
...
}

根据模型生成TOKEN

$member = \App\Models\Members::where('id',7)->select('id','username')->first();
$token = \JWTAuth::fromUser($member);
echo $token;exit;

二、自定义生成TOKEN:


$customClaims = ['sub' => [
'id' => '7',
'name' => 'kocor',
]];
$payload = \JWTFactory::make($customClaims);
$token = \JWTAuth::encode($payload);
echo $token;exit;

解密提取TOKEN信息


提取TOKEN信息

$user_info = JWTAuth::parseToken()->authenticate()

刷新TOKEN

$newToken = JWTAuth::refresh($_REQUEST['token']);

使用实例


use Tymon\JWTAuth\Exceptions\JWTException;
use Tymon\JWTAuth\Exceptions\TokenExpiredException;
use Tymon\JWTAuth\Exceptions\TokenInvalidException; //JWT提取会员信息
try {
if (! $user_info = JWTAuth::parseToken()->authenticate()) {
return Api::arr(config('statusCode.jwt_user_not_found'), trans('message.jwt_user_not_found').':404');
}
//在token有效期内允许刷新
$newToken = JWTAuth::refresh($_REQUEST['token']);
return Api::json(config('statusCode.success'), trans('message.success'),$newToken);
} catch (TokenExpiredException $e) {
try {
//在刷新有效期内
$newToken = JWTAuth::refresh($_REQUEST['token']);
return Api::json(config('statusCode.success'), trans('message.success'),$newToken);
} catch (JWTException $e) {
// 过期用户
return Api::json(config('statusCode.jwt_token_expired'), trans('message.jwt_token_expired').$e->getStatusCode());
}
//无效的token
} catch (TokenInvalidException $e) {
return Api::json(config('statusCode.jwt_token_invalid'), trans('message.jwt_token_invalid').$e->getStatusCode());
//token不存在
} catch (JWTException $e) {
return Api::json(config('statusCode.jwt_token_absent'), trans('message.jwt_token_absent').$e->getStatusCode());
}

by kocor

原文地址:https://segmentfault.com/a/1190000016391157

laravel使用JWT做API认证的更多相关文章

  1. Laravel 使用 JWT 做 API 认证之tymon/jwt-auth 1.0.0-beta.1实践 - moell - SegmentFault

    安装 将"tymon/jwt-auth": "1.0.0-beta.1" 添加到 composer.json 中,执行 composer update Prov ...

  2. laravel jwt 做API 退出登录(注销) 该怎么弄? 如何让token失效

    laravel jwt 做API 退出登录(注销) 该怎么弄? 如何让token失效 php框架 laravel 2.1k 次浏览 问题对人有帮助,内容完整,我也想知道答案0问题没有实际价值,缺少关键 ...

  3. 前后端分离下用jwt做用户认证

    0 前后端分离下的用户信息认证 前端使用Vue+axios,后端使用SpringBoot+SpringSecurity. 为了解决http无状态的问题,我采用jwt(json web token)保存 ...

  4. springboot+jwt做api的token认证

    本篇和大家分享jwt(json web token)的使用,她主要用来生成接口访问的token和验证,其单独结合springboot来开发api接口token验证很是方便,由于jwt的token中存储 ...

  5. [ Laravel 5.3 文档 ] 安全 ―― API认证(Passport)保障安全性。

    1.简介 Laravel通过传统的登录表单已经让用户认证变得很简单,但是API怎么办?API通常使用token进行认证并且在请求之间不维护session状态.Laravel使用LaravelPassp ...

  6. Laravel Passport API 认证使用小结

    Laravel Passport API 认证使用小结 八月 4, 2017 发布在 Laravel 看到Laravel-China 社区常有人问 Laravel Passport 用于密码验证方式来 ...

  7. laravel Passport - 创建 REST API 用户认证以及Dingo/Api v2.0+Passport实现api认证

    第一部分: 安装passport 使⽤ Composer 依赖包管理器安装 Passport : composer require laravel/passport 接下来,将 Passport 的服 ...

  8. spring jwt springboot RESTful API认证方式

    RESTful API认证方式 一般来讲,对于RESTful API都会有认证(Authentication)和授权(Authorization)过程,保证API的安全性. Authenticatio ...

  9. Laravel 的 API 认证系统 Passport 三部曲(二、passport的具体使用)

    GQ1994 关注 2018.04.20 09:31 字数 1152 阅读 1316评论 0喜欢 1 参考链接 Laravel 的 API 认证系统 Passport 三部曲(一.passport安装 ...

随机推荐

  1. windows下本地安装oracle忘记密码,账号被锁咋办

    忘记密码咋办: 进入cmd,输入set ORACLE_SID=ymxg  (ORACLE_SID的值为你想登录的oracle实例的SID) 然后输入:sqlplus / as sysdba 最后输入: ...

  2. android中常见的内存泄漏和解决的方法

    android中的内存溢出预计大多数人在写代码的时候都出现过,事实上突然认为工作一年和工作三年的差别是什么呢.事实上干的工作或许都一样,产品汪看到的结果也都一样,那差别就是速度和质量了. 写在前面的一 ...

  3. [Java]对字符串中的每一个单词个数进行统计

    这是来自一道电面的题. 单词统计非常easy想到用Map来统计,于是想到了用HashMap. 可是我却没有想到用split来切割单词,想着用遍历字符的方式来推断空格.人家面试官就说了,假设单词之间不止 ...

  4. Marching squares & Marching cubes

    提要 Marching squares 主要是用于从一个地图(用二维数组表示)生成轮廓的算法.Marching cubes则相应的是在空间生成网格的方法.最常见的应用就是天气预报中气压图的生成.还经常 ...

  5. iOS开发之获取沙盒路径

    iOS开发之沙盒机制(SandBox)具体解说了沙盒的一些机制.在开发中,我们须要对沙盒进行操作.所以我们须要获取到沙盒路径. 沙盒里的目录包含Documents.Library.tmp.这三个目录的 ...

  6. 2016.04.19,英语,《Vocabulary Builder》Unit 16

    top, comes from topos, the Greek word for 'place'. ectopic: [ek'tɑːpɪk] adj. [医]异位的,异常的 topical: ['t ...

  7. Java缓存server调优

    搜索降级方案中xmn開始使用bizer默认的128M,很慢. 偶然改成1G,效果立刻上来,可是xmx调大并没有明显效果.                  100并发             200并 ...

  8. B1968 [Ahoi2005]COMMON 约数研究 数论

    大水题,一分钟就做完了...直接枚举1~n就行了,然后在n中判断出现多少次. 题干: Description Input 只有一行一个整数 N(0 < N < 1000000). Outp ...

  9. SwiftUI 官方教程(六)

    6. 在列表和详情之间设置导航 虽然列表已经能显示了,但是我们还不能通过点击单个地标来查看地标详情页面.SwiftUI教程 把 list 嵌入一个 NavigationView 中,并把每个 row  ...

  10. Html Ajax上传文件,form表单下载文件

    Html中的代码: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type&quo ...