Вход в пакет Laravel перенаправляет на стартовую страницу с кодом состояния 302

Цель

Войдите в систему как пользователь в пакете Laravel.

Проблема

Нажатие кнопки входа перенаправляет на стартовую страницу, а в консоли я получаю код состояния 302. Это путь кнопки входа: <a href = "{{ route('login') }}">Login</a>. Он определяется в web.php следующим образом: Route::get('login', [LoginController::class, 'login'])->name('login'). То же самое происходит, когда я пробую это в адресной строке с помощью: 127.0.0.1:8000/login.

Описание

Это моя первая попытка пакетной разработки laravel. Поэтому я создал новое приложение Laravel с помощью Laravel 8. С помощью php artisan ui bootstrap --auth я создал каркас аутентификации и теперь попытался сделать его пакетом laravel. Я следовал этой инструкции.
Всю ветку проекта вы можете найти здесь.
Заранее спасибо за ваше время.
Вот структура пакета до сих пор:

Маршруты

<?php

use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Route;

use Leonp5\Limplecms\Http\Controllers\Admin\PagesController;
use Leonp5\Limplecms\Http\Controllers\Auth\LoginController;

// Set language

Route::get('locale/{locale}', function ($locale) {
    Session::put('locale', $locale);
    return redirect()->back();
});


Route::get('/', function () {
    return view('limplecms::welcome');
});

Route::get('login', [LoginController::class, 'login'])->name('login');
Route::post('login', [LoginController::class, 'login']);
Route::post('logout', [LoginController::class, 'logout'])->name('logout');

Route::get('/home', [Leonp5\Limplecms\Http\Controllers\HomeController::class, 'index'])->name('home');

Route::resource(config('limplecms.admin_index_pages_url'), PagesController::class)->middleware('can:admin');

DependencyProvider пакета

<?php

namespace Leonp5\Limplecms;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Route;
use Illuminate\Contracts\Auth\Access\Gate as GateContract;

class LimpleCmsProvider extends ServiceProvider
{
    public function register()
    {
        $this->mergeConfigFrom(__DIR__ . '/../config/config.php', 'limplecms');
        $this->mergeConfigFrom(__DIR__ . '/../config/auth.php', 'limplecms');
    }

    public function boot(GateContract $gate)
    {

        $this->registerRoutes();

        $this->loadViewsFrom(__DIR__ . '/../resources/views', 'limplecms');


        if ($this->app->runningInConsole()) {

            $this->publishes([
                __DIR__ . '/../dist' => public_path('limplecms'),
            ], 'assets');


            $this->publishes([
                __DIR__ . '/../config/config.php' => config_path('limplecms.php'),
            ], 'config');

            $this->publishes([
                __DIR__ . '/../resources/views' => resource_path('views/vendor/limplecms'),
            ], 'views');
        }

        $gate->define("admin", function ($user) {
            return $user->hasRole("admin");
        });

        $gate->define("editor", function ($user) {
            return $user->hasRole("editor");
        });
    }

    protected function registerRoutes()
    {
        Route::group($this->routeConfiguration(), function () {
            $this->loadRoutesFrom(__DIR__ . '/../routes/web.php');
        });
    }

    protected function routeConfiguration()
    {
        return [
            // 'prefix' => config('limplecms.prefix'),
            'middleware' => config('limplecms.middleware'),
        ];
    }
}

ЛогинКонтроллер
(Метод входа/выхода определен в трейте AuthenticatesUsers, который взят из Laravel, и я ничего там не менял)

<?php

namespace Leonp5\Limplecms\Http\Controllers\Auth;

use Leonp5\Limplecms\Http\Controllers\Controller;
// use App\Providers\RouteServiceProvider;
use Illuminate\Contracts\Container\BindingResolutionException;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{
    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    // protected $redirectTo = RouteServiceProvider::HOME;

    // commenting out this line and add a specific redirectTo function for a custom redirect

    // protected $redirectTo = RouteServiceProvider::HOME;

    // needs to bring in Auth Facade

    /**
     * 
     * @return mixed 
     * @throws BindingResolutionException 
     */
    public function redirectTo()
    {
        $user = Auth::user();
        if ($user->hasRole("admin")) {
            $this->redirectTo = route('pages.index');
        } else {
            $this->redirectTo = route("home");
        }

        return $this->redirectTo;
    }

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    /**
     * Get the login username to be used by the controller.
     *
     * @return string
     */
    public function username()
    {
        $login = request()->input('identity');

        $field = filter_var($login, FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
        request()->merge([$field => $login]);

        return $field;
    }

    /**
     * Validate the user login request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return void
     *
     * @throws \Illuminate\Validation\ValidationException
     */
    protected function validateLogin(Request $request)
    {
        $messages = [
            'identity.required' => 'Email or username cannot be empty',
            'password.required' => 'Password cannot be empty',
        ];

        $request->validate([
            'identity' => 'required|string',
            'password' => 'required|string',
        ], $messages);
    }
}

HomeКонтроллер

<?php

namespace Leonp5\Limplecms\Http\Controllers;

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    public function index()
    {
        return view('limplecms::home');
    }
}

auth.php (Конфигурация)
(скопировал стандартный файл и изменил только эту строчку)

'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => Leonp5\Limplecms\Models\User::class,
        ],
    ],

config.php

<?php

return [

    'admin_index_pages_url' => '/admin/pages',

    'prefix' => 'cms',
    'middleware' => ['web'],
];

Стандартное приветственное лезвие строительных лесов
(Не думайте, что проблема здесь, потому что ввод 127.0.0.1:8000/login в адресной строке браузера также перенаправляет. Но кто знает...)

<div class = "relative flex items-top justify-center min-h-screen bg-gray-100 dark:bg-gray-900 sm:items-center sm:pt-0">
            @if (Route::has('login'))
                <div class = "hidden fixed top-0 right-0 px-6 py-4 sm:block">
                    @auth
                        <a href = "{{ url('/home') }}" class = "text-sm text-gray-700 underline">Home</a>
                    @else
                        <a href = "{{ route('login') }}" class = "text-sm text-gray-700 underline">Login</a>

                        @if (Route::has('register'))
                            <a href = "{{ route('register') }}" class = "ml-4 text-sm text-gray-700 underline">Register</a>
                        @endif
                    @endif
                </div>
            @endif

Так что же такое «кнопка входа»? По какому URL-адресу он переходит? Какой метод запускается?

miken32 22.12.2020 18:51

Код состояния HTTP 302 означает перенаправление, а не код ошибки. Все коды статуса ищите здесь: httpsstatuses.com

adampweb 22.12.2020 18:56

Я определяю маршрут к функции входа в систему в LoginController, но функция «вход» не существует в вашем LoginController. А также функции выхода из системы не существует

adampweb 22.12.2020 19:12

Спасибо за ваши комментарии @AdamP. @ miken32 :) Я попытался уточнить вопрос. Я предполагаю, что «кнопка входа» не проблема, потому что такое же поведение происходит, когда я просто пытаюсь вызвать страницу через 127.0.0.1:8000/login. Функции входа и выхода определены в трейте AuthenticatesUsers, который находится внутри LoginController. Я думал, что это работает, потому что до Laravel 8 в обычном приложении (не в пакете) это можно было назвать так: Route::get('login', 'Auth\LoginController@login')->name('login')

leonp5 22.12.2020 21:18
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
4
1 806
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Благодаря комментарию @Adam P. я попытался определить маршрут в LoginController для отображения формы входа, и это работает. Итак, внутри LoginController я добавил этот метод:

 public function show()
    {
        return view('limplecms::auth.login');
    }

А внутри web.php, где определяются маршруты, я изменился
Route::get('login', [LoginController::class, 'login'])->name('login');
чтобы
Route::get('login', [LoginController::class, 'show'])->name('login');

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