token使用场景
项目分为两端pc和h5,对应的用户表分别为users和members其中users为后台管理员用户表,memers为项目用户表,在用户通过h5登陆的时候使用member模型并且用户只采用手机号快捷登陆,也就是说member表中的用户没有密码,后台管理员登陆的时候使用的是user模型,我们采取路由中间件的方式进行token的验签
为了实现该效果分为以下几步
一、token的生成
查看https://www.cnblogs.com/mzli/p/10637214.html可了解使用jwttoken的配置,pc端生成token我们使用auth('users')->attempt($data),$data=[用户名,密码]
attempt方法的解释:Attempt to authenticate a user using the given credentials(尝试使用给定凭据对用户进行身份验证)
同样的pc端使用auth('users')->user($token)来解析token中包含的用户信息
h5 登录时我们仅通过用户id来生成token使用方法为tokenById($id)同样的可以通过auth('')->user($token)来获取信息但是这里应该使用member门面如auth('member')->user($token)
二、token的验签通过路由中间件
jwttoken本身已经提供了验证token的中间件--jwt.auth,但是因为我们是两张表,所以在我们使用的时候应该指定使用member还是user表来查询对应token的数据
jwttoken验证token的中间件如下
而在这个中间件中又调用了class BaseMiddleware中的anthenticate方法,anthenticate方法如下
$this->auth就在本类中有一个构造函数,如下
所以也就是说,我们在使用这jwttoken提供的验证token的中间件jwt.auth中间件的时候我们就应该直接将对应的auth类声明
所以在路由中应该如下使用
这样,我们就可以使用对应的模型进行数据的验证和获取了
三、如果使用jwttoken中报错User not found也有可能是因为没有指定要使用的模型是哪一个,jwttoken无法获取到对应的用户数据,报错没有这个用户