从零实现Lumen-JWT扩展包(序):前因

转自:https://zhuanlan.zhihu.com/p/22531819?refer=lsxiao

最近这段时间我寻思着把几个月前爬下来的6万多首诗词曲文做成一个API,免费开放给大家用。

这么做的原因有三:

  • 其一,是因为之前写过的古诗词文网由于有很多BUG,而且又在备案http://gushiciwen.com的域名,索性直接把网站下线,域名转回国内后,这段时间又忙,没时间弄阿里云的主机,闲置了快个多月了。
  • 其二,是想给古诗词文网写一个Android版的开源示例的app,网站有了,但是我没有现成的REST API。
  • 其三,是因为最近 taylorotwell 发布了Lumen5.3,从使用Laravel以来,还没试过Lumen,所以先顺便尝试下Lumen。

说写就写吧,前几天就开工了,用了的Dingo/api和tymondesigns/jwt-auth来做,不过过程中发现很多坑,而且这些坑大部分都需要自己去填,这样写下来,真的是很不爽。

我真的不是想贬低tymondesigns/jwt-auth,这是一个很好的扩展包,提高了效率。但是,真的很不好用,我不知道作者是不是真的用过这个库实现过一些API的Demo,我就随便举个栗子,比如说客户端请求并发的问题。

说这个问题前,先普及一些概念。

由于JWT推荐Token过期时效尽量不要太长,比如1至2小时都是可以的,那么为了尽量减轻客户端主动请求刷新Token的操作,可以在每次客户端发起需要验证Token的请求时,对旧Token进行刷新,新Token会以 Authorization: Bearer <token> 头的形式添加到HTTP响应头中,因为开启了黑名单,旧的Token会在刷新完成后,被加入黑名单,也就不能再次使用了。

当客户端请求并发的时候,问题就来了,请求的处理完成速度肯定会有先后,当前一个请求处理完成后,Token已经刷新了,后一个请求拿着一个已经被加入黑名单的Token问服务器要数据,此时请求只会被拒绝。

如下所示,并发请求:

用第三方包图的就是方便,结果还要去翻Issues,看看别人是怎么用的,着实恼火。

不过最新的1.0dev版本增加了JWT_BLACKLIST_GRACE_PERIOD配置,设置一个黑名单宽限时间,允许在遇到并发请求的时候,避免上述的情况,不过这个方案我认为不能根本上的解决并发的问题,而且我个人已经不想在花时间给未来可能带来的问题上了。

所以,你们也就知道我要干什么了,别人的轮子不好用,不顺手,只有自己撸轮子了。

这篇教程我会分为三个部分来写:

  1. 准备步骤,包括从如何设置命名空间,到创建ServiceProvider,以及如何让Lumen读取扩展包配置文件,简单测试是否能够读取配置等。
  2. 实现JWT,包括生成Token,校验Token,刷新Token,黑名单等,不过这部分我会根据自己的喜好进行设计。
  3. 为Lumen集成JWT用户认证功能。
  4. 发布扩展包到Packagist,让别人能够通过Composer轻松的把我们的扩展包集成到自己的项目中去。

第一部分的代码在我写这篇序的时候已经完成了。

最后每个部分的代码我都会以Tutorial-1、Tutorial-2、Tutorial-3、Tutorial-4、Tutorial-5分支的形式上传到Github中。

master分支会存放完成后的扩展包代码。

----------------------------------------------------------------

2016年9月23日 01:41:22

由于JWT实现篇幅太长,JWT实现拆分成:

----------------------------------------------------------------

2016年9月30日 08:28:22

这个系列已经完结了,不过我会增加一个编写artisan 来实现命令行生成秘钥的章节。

Github lsxiao/jwt-auth,点击前往

原文地址:https://www.cnblogs.com/yadongliang/p/9320514.html

时间: 2024-10-12 06:09:03

从零实现Lumen-JWT扩展包(序):前因的相关文章

Linux 编译安装 php 扩展包 curl

php源码目录:/root/php php编译目录:/usr/local/webserver/php/ curl源码目录:/root/curl 1.curl,主要用于发送http请求,是php的一个扩展包. 2.安装过程: (1)curl下载:http://curl.haxx.se/download.html (2)具体安装过程: 解压:tar -zxvf curl.tar.gz cd  /(php源码目录,不是php编译目录)/ext/curl 运行phpize: /(php编译目录)/bin

如何正确使用 Composer 安装 Laravel 扩展包

我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自 这个文档 的: composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害. 因为 composer update 的逻辑是按照 composer.json 指定的扩展包版本规则,把所有扩展包更新到最新版本,注意,是 所有扩展包,举个例子,你在项目一开始的时候使用了 monolog,当时的配置信息是 "monolog/monolog": "1.*", 安装的是 mon

【Python笔记】如何用C语言实现Python第三方扩展包

Python支持C/C++实现的第3方扩展包,在性能要求高的场合,这种特性显得尤其重要. 本文以实例说明定制Python扩展包的基本步骤. 1. 扩展包源码实现 按照Python官网教程Extending Python with C or C++说明的步骤,扩展模块的源文件实现如下: #include <Python.h> // forward declaration void initpyext(void); // self-defined error obj static PyObject

python基础:python扩展包的安装方式

python扩展包有三种安装方式: 1. pip安装方式.python3默认自带pip,无需另外安装:在python2.7版本上默认为easy_install安装工作进行安装,如果需要使用pip安装,需要自行下载安装(可以从http://www.pip-installer.org网站下载). 2. 系统自带的包安装管理工具. 3. 从源代码安装. 使用pip安装:在command命令行中输入:pip install 包名,例如:pip install flask 使用pip安装指定版本:在com

手动安装 atom 扩展包 packages

由于某些原因, 我们下载 atom 扩展时发现速度特别慢, 或者根本无法下载, 那我们可以尝试手动安装 首先, 从 github 上下载(或其它地方) 扩展包, 解压 进入该文件夹, 找到 package.json 文件所在的目录 执行命令 npm install 如果依赖比较多, 可以尝试一个一个独立安装. 还有一种安装方式是执行: apm install 不过我没有尝试过该方案.

Ubuntu安装CPAN上的扩展包for Perl

Ubuntu下安装Perl的扩展包很是简单,只需要简单的步骤就可以了. sudo cpan cpan> install Bundle::CPANPLUS::Dependencies cpan> install Bundle::CPANPLUS 整个过程需要些时间.当安装完毕,接下来就可以使用cpan命令来安装扩展包了,如要安装Text::Autoformat扩展包, cpan[3]> install Text::Autoformat Reading '/home/richard/.cpa

R语言结合RColorBrewer颜色扩展包绘制横向直方图

首先载入颜色扩展包RColorBrewer,颜色包的具体使用方法可参见这篇文章http://book.2cto.com/201408/45552.html library(RColorBrewer) 本文以hadoop集群wordcount程序的输出结果为数据源 数据的整理代码如下 x=read.delim("C:/Users/a/Desktop/sample.txt",header=FALSE) #读入文本数据 names(x)=c("word","co

10个Laravel4开发者必用扩展包

Laravel是一个新的基于最新PHP版本号语法,支持IoC等设计模式的高速开发框架.眼下最新版本号为4.2,推荐安装PHP版本号5.5+. 本文列举10个基本软件包,都是开发人员使用Laravel框架来构建WEB应用过程中应该要用到的,无需自己反复构建,如认证.调试.站点优化. 代码生成器(Laravel Generators) 使用简单的命令行就能够自己主动依据代码模板生成Model/View/Controller代码以及模块(Module). IDE帮手(Laravel IDE Helpe

10个Laravel4开发人员必用扩展包

Laravel是一个新的基于最新PHP版本语法,支持IoC等设计模式的快速开发框架.目前最新版本为4.2,推荐安装PHP版本5.5+. 本文列举10个基本软件包,都是开发人员使用Laravel框架来构建WEB应用过程中应该要用到的,无需自己重复构建,如认证.调试.网站优化. 代码生成器(Laravel Generators) 使用简单的命令行就可以自动根据代码模板生成Model/View/Controller代码以及模块(Module). IDE帮手(Laravel IDE Helper) 可以