59 lines
1.9 KiB
PHP
59 lines
1.9 KiB
PHP
<?php
|
||
// +----------------------------------------------------------------------
|
||
// | Niucloud-admin 企业快速开发的saas管理平台
|
||
// +----------------------------------------------------------------------
|
||
// | 官方网址:https://www.niucloud-admin.com
|
||
// +----------------------------------------------------------------------
|
||
// | niucloud团队 版权所有 开源版本可自由商用
|
||
// +----------------------------------------------------------------------
|
||
// | Author: Niucloud Team
|
||
// +----------------------------------------------------------------------
|
||
|
||
namespace app\api\middleware;
|
||
|
||
use app\dict\sys\AppTypeDict;
|
||
use app\Request;
|
||
use app\service\api\login\AuthService;
|
||
use app\service\api\login\LoginService;
|
||
use Closure;
|
||
use Exception;
|
||
use core\exception\AuthException;
|
||
|
||
|
||
/**
|
||
* 会员登录token验证
|
||
* Class ApiCheckToken
|
||
* @package app\api\middleware
|
||
*/
|
||
class ApiCheckToken
|
||
{
|
||
/**
|
||
* @param Request $request
|
||
* @param Closure $next
|
||
* @param bool $is_throw_exception 是否把错误抛出
|
||
* @return mixed
|
||
* @throws Exception
|
||
*/
|
||
public function handle(Request $request, Closure $next, bool $is_throw_exception = false)
|
||
{
|
||
$request->appType(AppTypeDict::API);
|
||
//检测站点
|
||
( new AuthService() )->checkSite($request);
|
||
//通过配置来设置系统header参数
|
||
try {
|
||
$token = $request->apiToken();
|
||
$token_info = ( new LoginService() )->parseToken($token);
|
||
} catch (AuthException $e) {
|
||
//是否将登录错误抛出
|
||
if ($is_throw_exception)
|
||
return fail($e->getMessage(), [], $e->getCode());
|
||
}
|
||
if (!empty($token_info)) {
|
||
$request->memberId($token_info[ 'member_id' ]);
|
||
}
|
||
//校验会员和站点
|
||
( new AuthService() )->checkSiteAuth($request);
|
||
return $next($request);
|
||
}
|
||
}
|