Ошибка Laravel 6: при вводе маршрута входа в систему происходит сбой приложения

Я постараюсь максимально подробно объяснить свою проблему. Я только что создал приложение Laravel. Всякий раз, когда я вхожу в систему как пользователь или администратор (маршрут пользователя - http://localhost/Folder/, а путь администратора - http://localhost/Folder/admin ), и я ввожу путь просмотра входа, т.е. http://localhost/Folder/login < / strong> это приведет меня на эту страницу: http://localhost/Folder/home с сообщением об ошибке Страница не найдена

Я не добавил ни одного маршрута из / домой в свои маршруты. Я хочу ввести путь входа в систему, пользователь должен оставаться на той же странице, если он вошел в систему. И тот же случай для администратора вместо перехода по этому пути. http://localhost/Folder/home.

Вот маршруты для пользователя и администратора:

Route::get('/','HomeController@index')->name('home')->middleware(['auth','XSS']);

Route::group(['middleware' => ['auth','admin']], function()
{ Route::get('/admin/dashboard','HomeController@home_page')->name('admin.home');
});

Вот мой контроллер входа:

    protected function redirectTo(){
  if (Auth::user()->user_type == 'admin') {
    //return 'admin.dashboard';
    return redirect('/admin/dashboard');
  }
  else {
    //return 'home';
    return redirect('/');
  }

}

И мое AdminMiddleware

public function handle($request, Closure $next)
{
  if(Auth::user()->user_type == 'admin') //If usertype is admin
{
   return $next($request);
}
else {
  //  return redirect('home');
    return redirect()->route('/');
}
}

Все, что я хочу, это чтобы он оставался авторизованным при вводе маршрута страницы входа. Если потребуется, я с радостью предоставлю любую другую информацию. Любые предложения / решения будут высоко оценены.


person Murtaza Ahmad    schedule 21.02.2020    source источник
comment
Вы добавили маршруты входа в систему? Я не вижу ничего определенного в ваших примерах кода   -  person RobertB    schedule 21.02.2020
comment
Я не думаю, что в файле web.php требуется маршрут входа. Поправьте меня если я ошибаюсь   -  person Murtaza Ahmad    schedule 21.02.2020


Ответы (3)


Отредактируйте маршрут в промежуточном программном обеспечении RedirectIfAuthenticated

Он будет перенаправлен на / home, если обнаружит, что вы уже вошли в систему, и попытается получить доступ к странице входа.

person Snapey    schedule 21.02.2020
comment
Спасибо за ответ. Я только что нашел решение этой проблемы. - person Murtaza Ahmad; 21.02.2020

Вам нужно перегрузить метод redirectTo на loginController, который вы сделали, и обновить redirectIfAuthenticated в соответствии с вашей логикой.

Так что перейдите в свой loginController и обновите

protected function redirectTo() {your logic like you have done}

Также вам нужно будет обновить промежуточное ПО redirectIfAuthenticated, чтобы оно соответствовало вашей логике.

<?php

namespace App\Http\Middleware;

use App\Providers\RouteServiceProvider;

use Closure;

use Illuminate\Support\Facades\Auth;

class RedirectIfAuthenticated

{

/**

* Handle an incoming request.

*

* @param \Illuminate\Http\Request $request

* @param \Closure $next

* @param string|null $guard

* @return mixed

*/

public function handle($request, Closure $next, $guard = null)

{

if (Auth::guard($guard)->check()) {

return redirect(RouteServiceProvider::HOME);

}

return $next($request);

}

}

Также, если администратор / панель инструментов всегда будет основным маршрутом для вашего промежуточного программного обеспечения для авторизации и администрирования. Затем вместо изменения redirectIfAuthenticated.php просто измените константу HOME на routeserviceprovider.php в провайдерах и измените на

Const HOME = 'admin/dashboard';
person Alex Mac    schedule 21.02.2020
comment
Извините, это все с телефона ... Просто пытаюсь помочь. - person Alex Mac; 21.02.2020
comment
Спасибо за ответ. Куда добавить этот код в routeserviceprovider - person Murtaza Ahmad; 21.02.2020
comment
Мы обновим домашний маршрут к поставщику услуг / в сервисе, но затем перегрузим $ redirectTo в loginController, а также redirectTo () в loginController. - person Alex Mac; 21.02.2020
comment
Можете ли вы объяснить, каким кодом нам нужно заменить $ redirectTo и redirectTo () - person Murtaza Ahmad; 21.02.2020
comment
Возможно, я ошибаюсь, но вы захотите взглянуть на логику трейта, используемого в контроллере входа в систему, и увидите ссылку на домашнюю константу. Просто перегрузите эту функцию. Однако я почти уверен, что вы не перегрузили свойство $ redirectTo или, если оно не установлено, по умолчанию используется '/ home'. - person Alex Mac; 21.02.2020
comment
Какую версию laravel вы установили. Это немного изменит то, что вам нужно сделать. - person Alex Mac; 21.02.2020
comment
Он установлен в Laravel 6 - person Murtaza Ahmad; 21.02.2020
comment
Хорошо, я просто перешел к твоей проблеме. Если вы начнете с loginController перейти к типажу Authenticatedusers, затем перейдете к трейту redirectsUsers, вы увидите функцию, вызывающую у вас проблемы. / ** * Получить путь переадресации для регистрации / входа в систему. * * @return string * / публичная функция redirectPath () {if (method_exists ($ this, 'redirectTo')) {return $ this- ›redirectTo (); } вернуть свойство_exists ($ this, 'redirectTo')? $ this- ›redirectTo: '/ home'; } - person Alex Mac; 21.02.2020
comment
У меня нет маршрута с / home path - person Murtaza Ahmad; 21.02.2020
comment
Я просто хочу, чтобы когда пользователь вошел в систему и пользователь вводит / входит в систему, он должен оставаться на той же странице, а не выходить из системы. - person Murtaza Ahmad; 21.02.2020
comment
Извините на моем телефоне. Вам нужно перейти в свой loginController и добавить защищенный $ redirectTo = '/'; - person Alex Mac; 21.02.2020
comment
У меня уже есть защищенная функция redirectTo, могу ли я добавить защищенную $ redirectTo = '/'; также? - person Murtaza Ahmad; 21.02.2020
comment
Или вы можете перегрузить эту функцию redirectPath в вашем loginController. В любом случае у вас больше не будет перенаправления на домашний маршрут. - person Alex Mac; 21.02.2020
comment
Да, я бы попробовал - person Alex Mac; 21.02.2020
comment
Вы также можете добавить некоторые dd () или дампы, чтобы проверить свою логику - person Alex Mac; 21.02.2020
comment
Или стреляйте, если хотите, чтобы это был админ / панель управления, а не / - person Alex Mac; 21.02.2020
comment
Но если вы сбросите и умрете в этой функции перенаправления, вы узнаете, достигли ли вы этого. - person Alex Mac; 21.02.2020
comment
Другая ваша проблема заключается в том, что вы, вероятно, попадаете в redirectedIfAuthenticated.php и перенаправляете ... Я обновлю - person Alex Mac; 21.02.2020
comment
Обновите свой ответ соответствующим образом и удалите ненужные пункты. - person Murtaza Ahmad; 21.02.2020
comment
Все они необходимы: вы создали промежуточное программное обеспечение, которое имеет рябь изменений в нескольких местах. - person Alex Mac; 21.02.2020
comment
Спасибо за обновления. Последний способ изменения const HOME кажется хорошим. Но дом - это не одно и то же и для пользователя, и для администратора. Для пользователя это «/», а для администратора - «/ admin / dashboard». - person Murtaza Ahmad; 21.02.2020
comment
спасибо за ваши предложения и время. Я разобрался в проблеме - person Murtaza Ahmad; 21.02.2020

Спасибо всем за ваши предложения. Я просто что-то попробовал, и это сработало. В файле RedirectIfAuthenticated.php:

public function handle($request, Closure $next, $guard = null)
{
    if (Auth::guard($guard)->check()) {
        return redirect('/home');
    }

    return $next($request);
}

Только что изменил return redirect('/home');

to

return redirect('/');

И это сработало ...

person Murtaza Ahmad    schedule 21.02.2020
comment
Думал, это то, что я сказал? Почему нужно было добавить свой ответ? - person Snapey; 21.02.2020
comment
@Snapey Я ценю ваш ответ, но вы не добавляли фрагмент кода, и я разобрался с этой проблемой до вашего ответа. Спасибо еще раз - person Murtaza Ahmad; 21.02.2020
comment
То же самое. Я буквально тебе что. - person Alex Mac; 21.02.2020
comment
Фрагмент кода? вам нужно было только удалить слово "дом" - person Snapey; 21.02.2020
comment
@Snapey Вот почему я только что проголосовал за ваш ответ. Я отмечу ваш ответ как принятый, если вы этого хотите. Пожалуйста, проголосуйте за мой вопрос, если это возможно. - person Murtaza Ahmad; 22.02.2020