vd/app/Domains/Auth/Http/Middleware/AdminAuthenticate.php
2018-11-06 16:07:41 +08:00

48 lines
1.4 KiB
PHP

<?php
namespace App\Domains\Auth\Http\Middleware;
use Closure;
use ReflectionClass;
use ReflectionMethod;
use Illuminate\Http\Request;
use App\Exceptions\AuthException;
use App\Exceptions\NotExistException;
use App\Domains\Auth\Services\AuthService;
use Tymon\JWTAuth\Exceptions\JWTException;
use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
class AdminAuthenticate
{
public function handle(Request $request, Closure $next)
{
$auth = app('auth:admin')->getGuard();
if (! $auth->parser()->setRequest($request)->hasToken()) {
throw new AuthException('未提供Token', AuthException::TOKEN_NOT_PROVIDED);
}
try {
if (! $account = app('auth:admin')->authenticate()) {
throw new AuthException('账号未登录', AuthException::NOT_LOGIN);
}
} catch (JWTException $e) {
throw new UnauthorizedHttpException('jwt-auth', $e->getMessage(), $e, $e->getCode());
}
$checks = app()->tagged('auth:admin:check');
foreach ($checks as $check) {
call_user_func_array([$check, 'handle'], ['account' => $account, 'request' => $request]);
}
$response = $next($request);
$token = app('auth:admin')->getToken();
$response->headers->set('Authorization', 'Bearer '.$token);
return $response;
}
}