Я получаю ошибка, когда переношу маршрут ресурса в свое пользовательское ПО промежуточного слоя.
Мой промежуточное ПО:
<?php
namespace App\Http\Middleware;
use Closure;
use Auth;
class Officer
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::check() && Auth::user()->role == 'title_officer') {
return $next($request);
}
// elseif (Auth::check() && Auth::user()->role == 'agent') {
// return redirect('/agent');
// }
// else {
// return redirect('/customer');
// }
}
}
Ресурс маршрут с использованием промежуточного ПО:
Route::resource('new-order', 'BackendController')->middleware('officer');
Я получаю сообщение об ошибке:
(Trying to get property 'headers' of non-object).
Как это исправить?






попробуйте добавить блок else, который возвращается, когда ваше условие if не выполняется:
public function handle($request, Closure $next)
{
if (Auth::check() && Auth::user()->role == 'title_officer') {
return $next($request);
}else{
return back();
}
}
отсутствующий блок else создавал проблему, но теперь я ее исправил. Спасибо
В промежуточном программном обеспечении важно обрабатывать все случаи и соответствующим образом возвращать перенаправления или прерывать работу.
Вы выполняете return $next($request);, когда хотите, чтобы система продолжала обработку запроса вперед.
Однако, если условие if (Auth::check() && Auth::user()->role == 'title_officer') не выполняется, вы не указали, что должна делать система.
Вы можете быть abort(404), если вы не хотите, чтобы страница отображалась как доступная, или, может быть, abort(403) для доступа запрещен.
public function handle($request, Closure $next)
{
if (Auth::check() && Auth::user()->role == 'title_officer') {
return $next($request);
}
abort(403);
}
Но убедитесь, что вы не добавляете случай, который создаст бесконечный цикл. Пожалуйста, проверьте документация для получения дополнительных опций.
просто используйте что-то вроде этого в промежуточном программном обеспечении: RedirectIfAuthenticated
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
// your condition
return redirect('the route name');
}
}
Здорово! Мне не хватало помощника перенаправления.
Поздно, но .. Это происходит со мной, когда столбец в БД был нулевым.
Я также столкнулся с той же проблемой, когда создавал страницу панели администратора, но моя проблема была решена после того, как я добавил строку return $next($request); после условия «если-иначе»,
Вот мой код:
public function handle(Request $request, Closure $next)
{
if ($request->session()->has('ADMIN_LOGIN')){
#
}else{
$request->session()->flash('error', 'Access Denied');
return redirect('admin');
}
return $next($request);
}
почти @TravisBritz