Laravel 6 Ошибка: при входе в систему происходит сбой приложения. - PullRequest
0 голосов
/ 21 февраля 2020

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

Я не добавил ни одного маршрута / 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('/');
}
}

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

Ответы [ 3 ]

1 голос
/ 21 февраля 2020

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

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

1 голос
/ 21 февраля 2020

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

Итак go - на ваш loginController и обновить

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

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

<?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);

}

}

Также, если admin / dashboard всегда будет домашним маршрутом для вашего auth и admin middleware. Затем вместо изменения redirectIfAuthenticated. php просто измените константу HOME на routeserviceprovider. php в поставщиках и измените на

Const HOME = 'admin/dashboard';
0 голосов
/ 21 февраля 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');

на

return redirect('/');

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

...