通过上一篇《学习 Lumen 用户认证 (一)》mp.weixin.qq.com/s/KVUQE2DUe…的学习,大致懂了 Lumen 的用户认证主要使用 「api」的方式,来默认进行用户认证:
1 | 复制代码<?php |
当然在实际开发中,我们不能只是简单的获取 api_token
直接关联数据库查找用户信息。
在 API 开发中,用户认证是核心,是数据是否有保障的前提,目前主要有两种常用方式进行用户认证: JWT 和 OAuth2。
本文将简要说说如何利用 JWT 来进行用户认证
JWT
Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON 的开放标准 (RFC 7519)。该 token 被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT 的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该 token 也可直接被用于认证,也可被加密。
关于 JWT 更具体的介绍,相信网上有很多帖子和文章值得参考,这里先不阐述了。
为了学习 JWT 在 Lumen 中的使用,最好的办法就是在「程序员同志网 —— GitHub」搜索有关插件,找个 stars
最多的那个拿来研究研究。
tymondesigns/jwt-auth
JSON Web Token Authentication for Laravel & Lumen
安装 jwt-auth
通过 Composer 安装:
1 | 复制代码composer require tymon/jwt-auth:"^1.0@dev" |
注: 0.5.* 版本未对 Lumen 专门做封装
将 $app->withFacades() 和 auth 认证相关的注释去掉:
1 | 复制代码<?php |
然后在 AppServiceProvider 中注册 LumenServiceProvider:
1 | 复制代码$this->app->register(\Tymon\JWTAuth\Providers\LumenServiceProvider::class); |
在 Lumen 项目中,默认没有 config 文件夹,需要在项目根目录创建,并将 vendor 源代码中auth.php 复制出来,同时将 api 认证指定为「jwt」:
1 | 复制代码<?php |
最后,因为 JWT 协议需要用到 secret,所以需要生成一个 secret:
1 | 复制代码php artisan jwt:secret |
使用 jwt-auth
1. 更新 User Model
继承 Tymon\JWTAuth\Contracts\JWTSubject:
1 | 复制代码<?php |
2. 写一个 Login 方法,验证登陆信息,并返回 token 回客户端:
1 | 复制代码// 路由 |
postLogin 方法:
1 | 复制代码<?php |
可以请求试试了,用 Postman 跑跑:
有了 token 了。我们就可以用来测试,看能不能认证成功,获取用户信息。
3. 使用 token 获取用户信息
1 | 复制代码// 使用 auth:api 中间件 |
只要验证通过,就可以利用 Auth:user()方法获取用户信息了。
1 | 复制代码public function getUser(Request $request) { |
对照数据库:
以后只要在请求的 headers 中加入 token 信息即可,完美实现用户认证。
想了解有关 Lumen 的认证相关内容,可以参考上一篇文章《学习 Lumen 用户认证 (一)》mp.weixin.qq.com/s/KVUQE2DUe…
也可以参考 Lumen 官网
lumen.laravel-china.org/docs/5.3/au…
总结
对获取到 token 值 (eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vZGVtby5hcHAvYXV0aC9sb2dpbiIsImlhdCI6MTUxMDQ3NTQ5MiwiZXhwIjoxNTEwNDc5MDkyLCJuYmYiOjE1MTA0NzU0OTIsImp0aSI6Imx3UFpSMTN0MlV5eXRib1oiLCJzdWIiOjEsInBydiI6Ijg3ZTBhZjFlZjlmZDE1ODEyZmRlYzk3MTUzYTE0ZTBiMDQ3NTQ2YWEifQ.YTvsiO9MT3VgPZiI03v2sVEIsGLj8AUwJiDuXvCAvHI) 仔细观察,就会发现中间是由两个「.」来合并三段信息的。
下一步我们就来研究研究 JWT 的原理和也可以自己动手写个基于 JWT 的 Lumen 认证插件出来。
「未完待续」
coding01 期待您继续关注
qrcode
也很感谢您能看到这了
qrcode
本文转载自: 掘金