Я не понимаю, почему я получаю эту ошибку, но я знаю следующее:
/admin./admin
маршрут от Route::group(['middleware' => ['auth']], function(){} до
Route::group(['middleware' => ['web']], function(){} исправляет
проблема.Не знаю, как решить эту проблему.
Вот часть моего кода, который включает маршрут администратора:
Маршруты:
Route::group(['middleware' => ['web']], function(){
Route::get('/signup', 'PagesController@signup')->name('signUpView');
Route::get('/signin', 'PagesController@signin')->name('signInView');
Route::post('/signup', 'UsersController@signUp')->name('signup');
Route::post('/signin', 'UsersController@signIn')->name('signin');
Route::group(['middleware' => ['auth']], function(){
Route::get('/logout', 'UsersController@logOut')->name('logout');
Route::group(['middleware' => 'roles', 'roles' => 'admin'], function(){
Route::get('/admin', 'pagesController@admin')->name('admin');
});
});
});
Промежуточное ПО, которое я использовал для ролей:
<?php
namespace App\Http\Middleware;
use Closure;
class CheckRole
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($request->user() === null){
return redirect()->route('home');
}
$actions = $request->route()->getAction();
$roles = isset($actions['roles']) ? $actions['roles'] : null;
if ($request->user()->hasAnyRole($roles) || !$roles ) {
return $next($request);
}
return redirect()->route('home');
}
}
Функция выхода:
public function logOut(){
Auth::logout();
return redirect()->back();
}
Вид администратора:
@extends('layouts.app')
@section('content')
<div class = "wrapper">
<form class='uploadForm' action = "{{ route('createTag') }}" method = "POST" enctype = "multipart/form-data">
<label for = "tagName">Tag Name</label>
<input class='input' type = "text" name = "tagName" placeholder = "Tag Name">
<input type = "file" name = "tagImage"> {{ csrf_field() }}
<button class='Submit' type = "submit" name = "submit">Upload</button>
</form>
</div>
@endsection






Это нормально, что вы получаете эту ошибку!
Почему ?
из-за промежуточного программного обеспечения auth, когда вы выходите из системы, происходит перенаправление обратно в то место, где вы, но последнее местоположение (администратор) требует, чтобы вы вошли в систему, чтобы продолжить, поэтому промежуточное программное обеспечение перенаправляет вас на страницу входа в систему, предполагая, что у вас есть и связанный с ним названный маршрут login.
Для получения дополнительной информации взгляните на документация:
Перенаправление неаутентифицированных пользователей
When the auth middleware detects an unauthorized user, it will either return a JSON 401 response, or, if the request was not an AJAX request, redirect the user to the login named route.
You may modify this behavior by defining an
unauthenticatedfunction in yourapp/Exceptions/Handler.phpfile:use Illuminate\Auth\AuthenticationException; protected function unauthenticated($request, AuthenticationException $exception) { return $request->expectsJson() ? response()->json(['message' => $exception->getMessage()], 401) : redirect()->guest(route('login')); }
Я обновил ответ, в котором вы можете изменить имя изменения маршрута guest(route('login')); на guest(route('signInView'));, и все готово :)
Вы можете просто перенаправить на маршрут, который не требует авторизации, т.е.
public function logOut(){
Auth::logout();
return redirect()->route('signInView');
}
Так что я просто убираю промежуточное ПО с ролями из промежуточного ПО 'auth'? Также я предполагаю, что где-то в файлах проекта имя маршрута входа по умолчанию установлено для входа в Laravel? Могу ли я изменить его на маршрут входа с другим именем?