Laravel 5.8 перенаправил вас слишком много раз, проблема с промежуточным ПО - PullRequest
0 голосов
/ 02 мая 2019

У меня есть маршрут регистрации.После регистрации на шаге 1 он отправляет электронное письмо пользователю, чтобы подтвердить свою учетную запись и ссылку на его электронную почту.После нажатия на ссылку, он должен перенаправить на signup/step2, и закончить, и он может получить доступ к job-seeker/home.

, поэтому логика после окончания регистрации, пользователь не может снова посетить signup/step2, потому что пользователь ужезакончил заполнить форму.и до заполнения signup/step2 он не может получить доступ также к job-seeker/home.Так что все наоборот.

в основном мое промежуточное ПО было первым: проверьте, выполнил ли пользователь шаг 2 и добавил ли он в столбец is_completed в базе данных.затем на втором промежуточном программном обеспечении - посещать только его маршрут по своей роли, он не может получить доступ к другим маршрутам из другой роли и перенаправить в свой дом в зависимости от его роли.

Но это бросает мне слишком много перенаправления и переключенияобе стороны, даже я еще не заполнил step2 еще.Это мой GIF ниже.

enter image description here


MyCode

Ядро.php

class Kernel extends HttpKernel
{
    ...
    protected $routeMiddleware = [
        ...
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'isCompleted' => \App\Http\Middleware\IsCompleted::class,
    ];

Middleware / IsCompleted.php

class IsCompleted
{
    public function handle($request, Closure $next)
    {
        if(auth()->user()->isCompleted == 1){
            return $next($request);
        }

        // if 0, redirect to step2
        return redirect()->route('register.step2');
    }

Middleware/RedirectIfAuthenticated.php

use Illuminate\Support\Facades\Auth;

class RedirectIfAuthenticated
{
    public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            if ( Auth::user()->hasRole('job-seeker') ) {
                return redirect()->route('job-seeker.home');
            } else if(Auth::user()->hasRole('admin')) {
                return redirect()->route('admin.home');
            }
        }

        return $next($request);

Маршруты / Web.php

<?php

Route::get('/', function () {
    return view('welcome');
});

Route::group(['middleware' => ['verified', 'isCompleted']], function() {
    Route::group(['prefix' => 'admin', 'name' => 'admin.'], function() {
        Route::get('/home', function(){ return "test"; })->name('admin.home');
    });

    Route::group(['prefix' => 'job-seeker', 'name' => 'job-seeker.'], function() {
        Route::get('/home',         'Jobseeker\HomeController@index')->name('job-seeker.home');
    });
});

Auth::routes(['verify' => true, 'register' => false]);
Route::get('signup/{usertype}'      , 'Auth\RegisterController@getStep1')->name('register.step1');
Route::post('signup/{usertype}'     , 'Auth\RegisterController@postStep1');

Route::group(['middleware' => ['auth']], function() {
    Route::get('signup/step2'       , 'Auth\RegisterController@getStep2')->name('register.step2');
    Route::post('signup/step2'      , 'Auth\RegisterController@postStep2');
});

РЕДАКТИРОВАТЬ 1

Я осматриваю страницу и перехожу на вкладку сети, и вот результат.

enter image description here

1 Ответ

0 голосов
/ 02 мая 2019

ваш RedirectIfAuthenticated постоянно перенаправляет.Он никогда не достигает $next($request) для аутентифицированного пользователя.

Вам нужно иметь некоторую логику, например

if (route is seeker.home and user can visit seeker.home) {
    return $next(request);
}

вместо

return redirect()->route('job-seeker.home');
...