Мне нужно после проверки, если пользователь зарегистрирован как редактор, чтобы перенаправить на страницу профиля …
Вот мой код:
<?php namespace App\Http\Middleware; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Redirect; use Closure; class AdminMiddleware { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { if(Auth::check()){ if(Auth::user()->roles->toArray()[0]['role'] == 'editor'){ return redirect('/profile'); } return $next($request); } else { return $next($request); } } }
Проблема с этим кодом – когда пользователь является редактором, я получаю бесконечный цикл ….
Вот мои маршруты:
Route::group(['middleware' => 'auth'], function(){ Route::get('home', ['middleware' => 'admin', function() { return view('home'); }]); Route::get('profile', array( 'as' => 'profile', 'uses' => 'UserController@getProfile' )); });
Кто-нибудь знает, в чем проблема?
Где вы зарегистрировали свое промежуточное ПО в App\Http\Kernel
?
Является ли он защищенным $middleware = []
или protected $routeMiddleware = []
?
Если он зарегистрирован в $middleware
он будет запускаться по каждому запросу, тем самым вызывая бесконечный цикл, если так использовать только $routeMiddleware
Перейдите в Kernel.php
. Это в app\http
. Попробуйте найти protected $routeMiddleware
в этом массиве, который вам нужно добавить
'admin' => \App\Http\Middleware\AdminMiddleware::class
После этого он должен работать нормально. Надеюсь, это поможет любому, кто сталкивается с той же проблемой.
Я обнаружил, что это меньше кода и меньше решений для перенаправления пользователей на основе ролей. Поместите это в свой AuthController.php
protected function authenticated( $user) { if($user->user_group == '0') { return redirect('/dashboard'); } return redirect('my-account'); }