Laravel中的中间件重定向循环错误



我正试图根据用户在注册页面中输入的角色来重定向用户,但我一直收到"重定向次数太多"的错误。我想这是因为我在主页上同时使用auth和guest mddleware,但我似乎无法修复

Web.php:

Route::get('/', function () {
return view('auth.login');
});
Auth::routes();
// Using middleware guest (Redirect If Authenticated) to check role and redirect to right route.
Route::middleware(['guest'])->group(function(){
Route::get('/home', 'HomeController@index')->name('home');
});

Route::prefix('referrer')->group(function(){
/* need a more advanced middleware to give a notification when a brand user hits the
*  referrer register/login page.
*  e.g. logout and switch account, or simply make the referrer auth pages not accessible.
*/
Route::get('/login/{program_id?}', 'ReferrerController@showLoginForm')->name('referrer.login')->middleware('guest');
Route::post('/login/{program_id?}', 'AuthLoginController@login')->name('referrer.login.user');
Route::get('/', 'ReferrerController@getHome')->name('referrer.home')->middleware('auth');

//program middieware
Route::middleware(['program.exist'])->group(function(){
Route::get('/register/{program_id?}', 'ReferrerController@showRegistrationForm')->name('referrer.register');
Route::post('/register/{program_id?}', 'ReferrerController@register')->name('referrer.register.user');
});
});

寄存器控制器:

class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/
use RegistersUsers;
/**
* Where to redirect users after registration.
*
* @var string
*/
// protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
/**
* Get a validator for an incoming registration request.
*
* @param  array  $data
* @return IlluminateContractsValidationValidator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'role' => ['required', 'integer', 'between:1,3'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param  array  $data
* @return AppUser
*/
protected function create(array $data)
{
$user = User::create([
'name' => $data['name'],
'role_id' => $data['role'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
return $user;
}
protected function redirectTo() {
$role = auth()->user()->role_id;
switch ($role) {
case '3':
return RouteServiceProvider::REF_HOME;
break;
case '1':
//temp set as brand home
return RouteServiceProvider::ADMIN_HOME;
break; 
default:
return RouteServiceProvider::HOME;
break;
}
}
}

家庭控制器:

class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return IlluminateContractsSupportRenderable
*/
public function index()
{
return view('home');

RedirectIfAuthenticated Middleware:

class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param  IlluminateHttpRequest  $request
* @param  Closure  $next
* @param  string|null  $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{

if (Auth::guard($guard)->check()) {
// User role
$role = Auth::user()->role->name;
switch ($role) {
//role_id = 3
case 'referrer':
return redirect(RouteServiceProvider::REF_HOME);
break;
//role_id = 1
case 'admin':
//temp set as brand home
return redirect(RouteServiceProvider::ADMIN_HOME);
break; 
default:
return redirect(RouteServiceProvider::HOME);
break;
}
}
return $next($request);
}
}

HomeController中的索引函数有auth和guest中间件,只需使用其中一个即可。

最新更新