Я получаю «InvalidArgumentException Route [логин] не определен». когда я выхожу из системы, находясь на моем административном маршруте, доступном только администраторам

Я не понимаю, почему я получаю эту ошибку, но я знаю следующее:

  • Это происходит только тогда, когда я выхожу из системы, находясь на моем административном маршруте /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
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
163
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это нормально, что вы получаете эту ошибку!

Почему ?

из-за промежуточного программного обеспечения 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 unauthenticated function in your app/Exceptions/Handler.php file:

use Illuminate\Auth\AuthenticationException;

protected function unauthenticated($request, AuthenticationException $exception)
{
    return $request->expectsJson()
                ? response()->json(['message' => $exception->getMessage()], 401)
                : redirect()->guest(route('login'));
}

Так что я просто убираю промежуточное ПО с ролями из промежуточного ПО 'auth'? Также я предполагаю, что где-то в файлах проекта имя маршрута входа по умолчанию установлено для входа в Laravel? Могу ли я изменить его на маршрут входа с другим именем?

Bobimaru 01.08.2018 10:16

Я обновил ответ, в котором вы можете изменить имя изменения маршрута guest(route('login')); на guest(route('signInView'));, и все готово :)

Maraboc 01.08.2018 10:19

Вы можете просто перенаправить на маршрут, который не требует авторизации, т.е.

public function logOut(){
    Auth::logout();
    return redirect()->route('signInView');
}

Другие вопросы по теме