您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
thinkphp6单入口多应用下的中间件(及别名)的使用
发布时间:2021-10-17 11:48:46编辑:雪饮阅读()
在thinkphp6的单入口多应用情况下,如果要使用中间件,首先是建立中间件,以admin应用为例
namespace app\admin\middleware;
use Firebase\JWT\JWT;
class CheckToken
{
public function handle($request, \Closure $next)
{
$jwt = isset($_SERVER['HTTP_TOKEN']) ? $_SERVER['HTTP_TOKEN'] : '';
if (empty($jwt)) {
$res['msg'] = 'You do not have permission to access.';
return json($res);
}
try {
JWT::$leeway = 60;
$decoded = JWT::decode($jwt, Config("jwt.key"), ['HS256']);
$arr = (array)$decoded;
$request->userInfo=$arr;
} catch(\Exception $e) {
$res['msg'] = $e->getMessage();
return json($res);
}
return $next($request);
}
}
这里最重要的就是: 即完全限定的方式引入。 这里的别名功能,对完全限定方式进行了别名而形成的。
declare (strict_types = 1);
namespace app\admin\controller;
use \Firebase\JWT\JWT;
use think\facade\Db;
use app\admin\middleware\CheckToken;
use think\facade\Request;
class Index
{
/**
* @var \think\Request Request实例
*/
protected $request;
/**
* 构造方法
* @param Request $request Request对象
* @access public
*/
public function __construct(Request $request)
{
$this->request = $request;
}
protected $middleware = [
'CheckToken' => ['except' => ['register','login'] ]
];
public function createJwtToken($data){
$nowtime = time();
$token = [
'iss' => 'http://www.helloweba.net', //签发者
'aud' => 'http://www.helloweba.net', //jwt所面向的用户
'iat' => $nowtime, //签发时间
'nbf' => $nowtime + 10, //在什么时间之后该jwt才可用
'exp' => $nowtime + 600, //过期时间-10min
'data' => $data
];
$jwt = JWT::encode($token, Config("jwt.key"));
return $jwt;
}
public function register()
{
$username=$_POST["username"];
$passwd=$_POST["passwd"];
$data["username"]=$username;
$data["passwd"]=md5($passwd);
$userId = Db::name('jwt_user')->insertGetId($data);
//生成jwt-token
$data["id"]=$userId;
$jwt=$this->createJwtToken($data);
$res['msg'] = 'success';
$res['token'] = $jwt;
return json($res);
}
public function login(){
$username=$_POST["username"];
$passwd=$_POST["passwd"];
$user=Db::name('jwt_user')->where("username",$username)->where("passwd",md5($passwd))->find();
if($user){
$res['msg'] = 'success';
$res['token'] = $this->createJwtToken($user);
return json($res);
}
else{
$res['msg'] = 'username or passwd failed';
return json($res);
}
}
public function userList(){
$list=Db::name('jwt_user')->select();
$res['msg'] = 'success';
$res['data'] = $list;
return json($res);
}
public function userInfo(){
$res['msg'] = 'success';
$res['data'] = request()->userInfo;
return json($res);
}
}
\app\admin\middleware\CheckToken::class => ['except' => ['register','login'] ]
];
// 中间件配置
return [
'alias' => [
'CheckToken' => \app\admin\middleware\CheckToken::class
]
];
关键字词:thinkphp6,多应用,单入口,中间件,别名