Я установил тему adminlte и хочу создать область администратора.
Так что мой URL должен выглядеть так:
/admin = admin home page dashboard
/admin/login
/admin/register/
Это мой маршрут до сих пор:
Route::group(['middleware' => 'auth'], function () {
Route::get('/admin', ['as' => 'admin', 'uses' => 'Admin\DashboardController@index']);
});
Когда я получаю доступ к /admin
страница, на которую я перенаправлен /login
вместо /admin/login
Перенаправление производится отсюда:
vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php
в unauthenticated
метод
Я проследил ответ отсюда: Laravel 5.5 изменить URL-адрес перенаправления для входа без аутентификации ,но я закончил с этой ошибкой:
Declaration of App\Exceptions\Handler::unauthenticated($request, App\Exceptions\AuthenticationException $exception) should be compatible with Illuminate\Foundation\Exceptions\Handler::unauthenticated($request, Illuminate\Auth\AuthenticationException $exception)
Любая идея, как мне изменить мой URL перенаправления? Спасибо
На самом деле у вас нет маршрута /admin/login
,
В вашем routes\web.php
файл, создать маршрут как
// Authentication Routes...
$this->get('admin/login', 'Auth\LoginController@showLoginForm')->name('login');
И после этого обновления маршрут перенаправления по умолчанию для неавторизованных пользователей выглядит следующим образом
В app/Exceptions/Handler.php
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
return redirect()->guest('/admin/login');
}
Правильное местоположение для обновления: app/Exceptions/Handler.php
Другой способ, где вы можете просто прикрепить префикс к вашим маршрутам:
Обновить файл app/providers/RouteServiceProvider.php
как
protected function mapWebRoutes()
{
Route::prefix('admin/')
->middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
}
Пожалуйста отметьте Route::prefix('admin/')
Теперь, делая это, вы должны иметь такие маршруты, как
Route::get('/', function () {......
Route::get('/login', function () {.....
Теперь вы просто прикрепляете префикс к маршрутам, не меняя их нигде в приложении laravel. Это может быть лучше сделать.
в вендоре / laravel / framework / src / Illuminate / Foundation / Exceptions / Handler.php
обновить функцию аутентификации
/**
* Convert an authentication exception into a response.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Auth\AuthenticationException $exception
* @return \Illuminate\Http\Response
*/
protected function unauthenticated($request, AuthenticationException $exception)
{
if($request->expectsJson()){
return response()->json(['message' => $exception->getMessage()], 401);
}
$guard = array_get($exception->guards(),0);
switch ($guard) {
case 'admin':
return redirect()->guest(route('admin.login'));
break;
default:
return redirect()->guest(route('login'));
break;
}
}