最近项目做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. POJ 2029

    二维树状数组可解此题 #include <iostream> #include <cstdio> #include <cstring> #include <a ...

  2. Spring技术内幕:SpringIOC原理学习总结

    前一段时候我把Spring技术内幕的关于IOC原理一章看完,感觉代码太多,不好掌握,我特意又各方搜集了一些关于IOC原理的资料,特加深一下印象,以便真正掌握IOC的原理. IOC的思想是:Spring ...

  3. strcpy函数使用方法以及底层实现

    strcpy(s1, s2);   strcpy函数的意思是:把字符串s2中的内容copy到s1中.连字符串结束标志也一起copy. 这样s1在内存中的存放为:ch\0; 在cout<<s ...

  4. JavaScript特效之前进,后退(返回上一级)

    在页面上增加前进,后退(返回上一级)功能: 方式一:使用函数 <script> function goback(){  history.go(-1);//返回或者history.back( ...

  5. jsp:attribute

    在传统 JSP 中,想要实现页面布局管理比较麻烦,为了解决在 JSP 中布局的问题,出现了很多开源软件,比如 Apache Tiles 和 SiteMesh 就是其中比较优秀的.但是使用开源软件实现布 ...

  6. Odoo(OpenERP)开发实践:数据模型学习

    作者:苏州-微尘 Odoo中,在Python类里定义的模型及字段信息,可在系统中直接查看.为用户开启技术特性权限后,就可以通过菜单 [设置->技术->数据结构->模型] 进入列表视图 ...

  7. ssh 结构

    service:业务层 dao:数据訪问层 hibernate:持久层

  8. Google的TensorFlow,微软CNTK, Amazon 的MxNet,Facebook 的Caffe2, PyTorch,国内百度的PaddlePaddle

    深度学习框架竞争很激烈,而且看上去都是业界巨头在玩. 老师木:是的.一个深度学习框架一旦像Hadoop那样成为事实工业标准,就占据了人工智能各种关键应用的入口,对各类垂直应用,基于私有部署的技术服务, ...

  9. 在Spring Boot中使用Spring-data-jpa实现分页查询

    转自:https://www.cnblogs.com/sandea/p/8275890.html 在我们平时的工作中,查询列表在我们的系统中基本随处可见,那么我们如何使用jpa进行多条件查询以及查询列 ...

  10. 线段树(1)——点修改&建树

    #include<cstdio> #include<algorithm> using namespace std; #define MAX 10000 #define INF ...