<?php
// +----------------------------------------------------------------------
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.tensent.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
// +----------------------------------------------------------------------
declare (strict_types = 1);

namespace app\middleware;

use think\App;
use think\Response;
use xiaodi\JWTAuth\Exception\JWTException;

class Check{
	protected $app;

	public function __construct(App $app){
		$this->app = $app;
	}
	
	/**
	 * @title 处理请求
	 *
	 * @param [type] $request
	 * @param \Closure $next
	 * @param [type] $store
	 * @return void
	 */
	public function handle($request, \Closure $next, $store = null){
		try {
			$verify = $this->app->get('jwt')->store($store)->verify();
			if (true === $verify) {
				if ($this->app->get('jwt.user')->getBind()) {
					if ($user = $this->app->get('jwt.user')->find()) {
						// 路由注入
						$request->user = $user;
	
						// 绑定当前用户模型
						$class = $this->app->get('jwt.user')->getClass();
						$this->app->bind($class, $user);
	
						// 绑定用户后一些业务处理
						$this->bindUserAfter($request);
					} else {
						return Response::create(['message' => '登录校验已失效, 请重新登录', 'code' => 2000], 'json', 401);
					}
				}
				return $next($request);
			}
		} catch (JWTException $e) {
			return Response::create(['message' => $e->getMessage(), 'code' => 2000], 'json', 401);
		}
	}

	public function bindUserAfter(){
		
	}
}
