当前位置: 首页 > news >正文

湛江网站设计软件郑州无痛人流哪家医院好

湛江网站设计软件,郑州无痛人流哪家医院好,网站主页模板,论吉林省网站职能建设在前面的文章中#xff0c;我们引入了JWT的验证方式#xff0c;但是在前面并没有做过多的处理#xff0c;只是用JWT生成了一个token#xff0c;那么今天来就解决后续问题为了保证用户信息的安全#xff0c; 我们的生成的JWT不可能一直有效#xff0c;我们在配置文件里边配…在前面的文章中我们引入了JWT的验证方式但是在前面并没有做过多的处理只是用JWT生成了一个token那么今天来就解决后续问题为了保证用户信息的安全 我们的生成的JWT不可能一直有效我们在配置文件里边配置的有有效期这里的单位是分钟但是当我们用户一直在60分钟之内在操作但是JWT过期后就需要用户重新登录这样是不合理的那么就需要对JWT生成的token进行刷新从而可以达到用户一直有效请求那么接下来我们就模拟一下用户的操作来做个简单的实例我们先自定义一个路由文件用来存放我们自己路由然后定义几个路由用来测试修改一下JWT失效的时间在jwt-auth的组件中过期校验是由Expiration中的 validatePayload来校验jwt的过期时间然后这里进行修改一下因为过期时间是1分钟不好测试我们来把这个过期时间进行调整一下调整为15秒就过期然后我们进行一下测试登录等15秒后咱们来获取一下用户信息这里现在会报出token已经过期其实这里存在的问题就已经很明显了如果用户这个时候在正常的操作但是我们的token这个时候给过期了那么对用户的体验来说肯定是不好的那么下来我们就来解决这个问题这个时候我们可以在异常这里做一个这样的操作那就是让他在时间过期后给她重置登录时时间如果到了这个时间我们需要重置一下请求头的token数据但这样是手动操作的然后在刷新页面,就依然可以获取到用户信息但是这样肯定是不行的这样做只是为了显示这个效果而已实际项目这样肯定不可以token到期后就直接跳到登录这样肯定是不可以的所以我们的token在无刷新界面的情况下就很有必要了那么代码怎么写代码写在哪里呢如果说对于token的检测最好是使用与中间件因为它可以很方便的帮助由我做到对于api请求的token检测也就是说代码会写在于中间件中所以创建一个刷新token的中间件那么中间件会有什么问题1.       它不确定是否用户有登入2.       它不确定之前登入的用户是否退出了登入3.       如果当前的token过期了那不就请求就失败了怎么解决呢解决问题以及流程1.       可以通过判断token是否存在如果存在就有登入没有就没有登入2.       判断用户的登入状态是否为退出3.       判断是否token过期4.       跟新请求头部流程创建自定义JWT自动刷新的中间件这里是中间件里边的内容参考地址https://learnku.com/articles/7264/using-jwt-auth-to-implement-api-user-authentication-and-painless-refresh-access-token?phpnamespace App\Http\Middleware;use Auth;use Closure;use Tymon\JWTAuth\Exceptions\JWTException;use Tymon\JWTAuth\Http\Middleware\BaseMiddleware;use Tymon\JWTAuth\Exceptions\TokenExpiredException;use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;class RefreshJwtToken extends BaseMiddleware{public function handle($request, Closure $next){// 检查此次请求中是否带有 token如果没有则抛出异常。$this-checkForToken($request);// 使用 try 包裹以捕捉 token 过期所抛出的 TokenExpiredException 异常try {// 检测用户的登录状态如果正常则通过if ($this-auth-parseToken()-authenticate()) {return $next($request);}throw new UnauthorizedHttpException(jwt-auth, 未登录);} catch (TokenExpiredException $exception) {// 此处捕获到了 token 过期所抛出的 TokenExpiredException 异常我们在这里需要做的是刷新该用户的 token 并将它添加到响应头中try {// 刷新用户的 token$token $this-auth-refresh();echo ---statr-----;echo $token;echo ----end----;// 使用一次性登录以保证此次请求的成功$sub $this-auth-manager()-getPayloadFactory()-buildClaimsCollection()-toPlainArray()[sub];auth(api)-onceUsingId($sub);} catch (JWTException $exception) {// 如果捕获到此异常即代表 refresh 也过期了// 用户无法刷新令牌需要重新登录。throw new UnauthorizedHttpException(jwt-auth,$exception-getMessage());}}// 在响应头中返回新的 tokenreturn $this-setAuthenticationHeader($next($request), $token);}}其实实际上需要的方法就是$this-auth-parseToken()-authenticate()校验用户的登入状态$this-checkForToken($request)校验是否存在tokensetAuthenticationHeader()向响应输出的时候设置刷新的token$this-auth-refresh()刷新token模仿BaseMiddleware- authenticate()的写法不过注意那个方法中所抛出的异常并不是实际所需要的异常JWTException 包含了所有异常对于过期时间的异常也在这里但是对于目前的情况最好是可以抛出TokenExpiredException 过期的异常其实最难的还是后面那个点这是难点所在。这个点的解释最有从源码的角度解释会好$this-auth-manager()-getPayloadFactory()-buildClaimsCollection()-toPlainArray()[sub];获取jwt-token中的用户idauth(‘api’)-onceUsingId()将改定的用户设置为登入其实这一步就是把用户设置成为登录状态然后进行测试首先需要把上边创建的中间件注册到我们的路由中间件里边去然后修改路由把Expiration.php恢复当令牌过期让其抛出TokenExpiredException异常让自定义的中间件捕获后在来生成令牌然后我们在来测试间隔一分钟去访问user那个路由我们的token就已经刷新了这边需要注意一点就是token刷新之后就会进入黑名单之后就不能在进行刷新所以项目在特殊情况下需要设置这几个参数这里需要注意一个问题中间件谁在前就会执行谁在文章一开始就说了需要判断用户是否登录由于jwt里边不存在check的检验方法所以我们自己定义一个webCheck方法因为在项目中曾经修改过配置文件把api的认证改为了jwt的认证守卫这个守卫就位于\vendor\tymon\src在之前使用auth(‘api’)- attempt 的时候实际就是执行的下面的方法。直接进入login的方法实际上登入的方法参数中并没有太多的操作就是校验用户的信息然后再设计登入之后的user也就是在这个过程中会直接返回出user用户的信息而在正常情况下使用auth的时候是可以因为是使用的web也就是auth.php中的配置也就是使用的是SessionGurad  直接进入login方法在通过getAuthIdentifier()方法完成完成之后然后再设置session缓存也就是说用户的信息会缓存在session中那么来看一下校验JWTGurad与SessionGuard的校验通过查找源码会发现并不存在check方法这个方法位于Illuminate\Auth\GuardHelpers中可以看到实际就是使用对应guard(webapi)中的user方法也就是通过user方法获取用户如果说用户不存在就会返回false简单解释jwt的校验过程最为重要的点就在于通过request获取jwt然后再去解析获取用的信息session的校验就是从session中获取用户的id然后再去数据库中查询用户所以这就是问题所以在那么针对于这个问题的话既希望能够保持jwt对于api认证又希望在web端校验(会员登入)最好的解决办法就是在JWTGurad中添加一个webCheck的校验方法但是实际上这样也不并不是很好因为版本会更新所以最好的办法就是扩展自定义guard在项目中通过Auth:: guard (‘守卫名称’) 就可以解析出所需要的守卫然后再通过resolve方法去解析出这个守卫发现这个类中有一个数组customCreators这说明我们是可以自定义driver的。也就是说虽然config/auth.php的guards中说driver只支持session和token但实际上是可以自己扩展的。可以测试一下在这个地方通过dd打印扩展的Guard为了方便测试接下来所有的测试路由均放置于routes/test.php中并且以test为前缀并且中间件为web 组然后访问那怎么扩展呢顺藤摸瓜发现class AuthManager中有一个方法extend然后看一下是怎么加载JWTGuard的打开jwt的这个extendAuthGuard就是在父级AbstractServiceProvider中的方法可以从方法中就可以看到这就是加载JWTGuard的方法所在也就是对于auth的guard扩展其实也就是说JWTGuard 的扩展载入是通过与服务提供LaravelServiceProvider中的boot载入的接下来自定义一个auth的guard并且继承与JWTGuard然后建议这个时候就对于这个Guard进行扩展加入做测试模仿JWTGuard的载入方式而操作的然后修改config/auth.php在访问下来完善自定义的app\Auth\JWTSessionGuard.php的代码1.       重写JWTGuard控制器2.       然后加入session的载入 注意RedisFactory 是use Illuminate\Contracts\Session\Session;3.       下一步在登入成功之后调用updateSession 缓存用户的id?phpnamespace App\Auth;use Tymon\JWTAuth\JWT;use Tymon\JWTAuth\JWTGuard;use Illuminate\Http\Request;use Illuminate\Contracts\Session\Session;use Illuminate\Contracts\Auth\UserProvider;use Tymon\JWTAuth\Contracts\JWTSubject;class JWTSessionGuard extends JWTGuard{protected $session;public function __construct(JWT $jwt, UserProvider $provider, Request $request , Session $session){$this-session $session ;parent::__construct($jwt, $provider, $request);}public function login(JWTSubject $user){$token $this-jwt-fromUser($user);$this-setToken($token)-setUser($user);$this-updateSession($user-id);return $token;}protected function updateSession($id){$this-session-put($this-getName(), $id);$this-session-migrate(true);}public function getName(){return login_jwt_ . sha1(static::class);}}最后修改AuthServiceProvider中的boot方法然后在测试然后在测试一下直接验证成功添加中间件然后还需要引入俩个中间件然后在回到咱们用户登录的控制器修改路由然后测试目前就把token本地存储还有token的刷新就全部弄完了
http://wiki.neutronadmin.com/news/250235/

相关文章:

  • 网站建设验收装修网页设计网站
  • 西安做网站的公司电话永久在线观看电影网址
  • 制作公司网站价格wordpress 商业网站
  • 汽车配件外贸网站火车票网站开发
  • 南宁建设银行官网招聘网站飞天侠调用wordpress
  • 房屋租赁网站开发需求分析网站建设会计分录
  • 怎么做网站不被发现内蒙网站开发
  • 企业网站模板带后台企业内部管理软件
  • 中国做网站推广哪家好365房产南京网站
  • 大自然的网站设计易网网站
  • 个人网站设计的意义网络营销的方式有几种
  • 网站管理平台扩展插件微信文章导入wordpress
  • 石家庄做外贸的网站推广公司注册代理费
  • wordpress 网站很卡更改wordpress登录地址
  • 烟台网站优化2022年国内重大新闻
  • 企业标准型手机网站网站顶部地图代码怎么做的
  • 网站建设策划公司地址合肥网站优化搜索
  • 各行各业网站建设服务周到做商品网站需要营业执照
  • 营销网站建设网站设计wordpress 重新安装
  • 怎么在另外一台电脑的浏览器打开自己做的网站地址栏输入什么qq上传空间wordpress
  • 素材网站视频网站建设话语
  • 广州制作网站公司电话网站建设和运行费用
  • 帮做动态头像的网站番禺本地网站
  • 网站开发一定找前端么聊城高新区建设局网站
  • 一个空间放2个网站wordpress填写
  • 网站开发逻辑房屋装修效果图制作
  • 长沙seo公司网站优化网站缓存优化怎么做
  • 沈阳个人网站制作做网站的硬件和软件环境
  • 江西省水利水电建设集团招标网站asp个人网站怎么建设
  • 做网站采集禅城技术支持骏域网站建设