Laravel 5.6 исключение тайм-аута сеанса при использовании пространственных разрешений

Я пытался перенаправить пользователя после тайм-аута сеанса, но при использовании пакета разрешений spatie я не могу получить TokenMismatchException для тайм-аута сеанса, я всегда получаю UnauthorizedException. Вот мой файл Exceptions / Handler.php:

public function render($request, Exception $exception)
{

if ($exception instanceof TokenMismatchException){


session()->flash('warning','Session timeout. Please login again.');
return redirect()->guest(route('login'));
}



if ($exception instanceof \Spatie\Permission\Exceptions\UnauthorizedException){


return redirect('/restricted');
}



return parent::render($request, $exception);
}

Как отловить исключение тайм-аута сеанса и сделать пользовательское перенаправление в этом случае?

0

Решение

Похоже на пакет RoleMiddleware оценивается раньше VerifyCsrfToken в трубопроводе. Из их источника видно, что UnauthorizedException немедленно, если пользователь не вошел в систему:

namespace Spatie\Permission\Middlewares;
use Closure;
use Illuminate\Support\Facades\Auth;
use Spatie\Permission\Exceptions\UnauthorizedException;
class RoleMiddleware
{
public function handle($request, Closure $next, $role)
{
if (Auth::guest()) {
throw UnauthorizedException::notLoggedIn();
}
$roles = is_array($role)
? $role
: explode('|', $role);
if (! Auth::user()->hasAnyRole($roles)) {
throw UnauthorizedException::forRoles($roles);
}
return $next($request);
}
}

Вы можете изменить порядок промежуточного программного обеспечения, установив $middlewarePriority свойство в ядре, однако, следует помнить, что это может привести к непреднамеренным побочным эффектам:

protected $middlewarePriority = [
\App\Http\Middleware\MyMiddleware::class,
];

Посмотрите на порядок промежуточного программного обеспечения, определенного в Illuminate\Foundation\Http\Kernel и отработать это.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]