Не определен логин маршрута Laravel 8

#laravel

#laravel

Вопрос:

У меня возникли некоторые проблемы с промежуточным программным обеспечением аутентификации в Laravel 8. В настоящее время, когда я запускаю свои тесты, я получаю сообщение об ошибке SymfonyComponentRoutingExceptionRouteNotFoundException: Route [login] not defined .

Я установил jetstream livewire и могу видеть их в своей routes папке. Мой тест должен перенаправляться на login , поскольку пользователь не вошел в систему. Я предполагаю, что это проблема, связанная с middleware('auth') тем, что он не идет туда, куда нужно, но я не могу найти никакой информации о том, как ее решить.

Это мой тест:

 <?php

namespace TestsFeature;

use AppModelsProject;
use AppModelsUser;
use IlluminateFoundationTestingRefreshDatabase;
use IlluminateFoundationTestingWithFaker;
use TestsTestCase;

class ProjectsTest extends TestCase
{
    use WithFaker, RefreshDatabase;

    /** @test */
    public function only_authenticated_users_can_create_projects()
    {
        $this->withoutExceptionHandling();

        $attributes = Project::factory()->raw();
        $this->post('/projects', $attributes)->assertRedirect('login');
    }
}
  

Маршруты

 <?php

use IlluminateSupportFacadesRoute;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
 */

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

Route::get('/projects', 'ProjectsController@index')->middleware('auth');
Route::get('/projects/{project}', 'ProjectsController@show');
Route::post('/projects', 'ProjectsController@store')->middleware('auth');


Route::get('/home', [AppHttpControllersHomeController::class, 'index'])->name('home');

Route::middleware(['auth:sanctum', 'verified'])->get('/dashboard', function () {
    return view('dashboard');
})->name('dashboard');

  

ProjectsController

 <?php

namespace AppHttpControllers;

use AppModelsProject;
use AppModelsUser;

class ProjectsController extends Controller
{

    public function index()
    {
        //Return all projects. Compact creates an array made up of both variables and values.
        $projects = auth()->user()->projects;
        return view('projects.index', compact('projects'));
    }

    public function show(Project $project)
    {
        //Get the wildcard no passed in as a reference and search for it in Project. If it doesn't exist, fail.
        return view('projects.show', compact('project'));
    }

    public function store()
    {
        //validate - check for title/description
        $attributes = request()->validate([
            'title' => 'required',
            'description' => 'required',
        ]);
        //Use middleware to check owner is logged in and then pass in project
        auth()->user()->projects()->create($attributes);
        //redirect - return a new view
        return redirect('/projects');
    }
}

  

Комментарии:

1. php artisan route:list и посмотрите, существует ли маршрут с именем «login»

2. Я не вижу маршрута входа в систему — в руководстве, которое я просматриваю, он не определен, я думаю, что он определен где-то в промежуточном программном обеспечении?

3. если в списке маршрутов его нет, значит, в вашем приложении его нет… похоже, что один из этих сумасшедших поставщиков услуг для этой шутки под названием jetstream и fortify, возможно, не запущен

Ответ №1:

Я столкнулся с той же проблемой, используя livewire и fortify. Решение состоит в том, чтобы иметь именованный маршрут входа

 Route::get('login', AppHttpLivewireLogin::class)->name('login');
  

Ответ №2:

Недавно я столкнулся с такой же проблемой. Решите это после прочтения документации здесь

Проверьте, является ли маршрут действительным и включен:

 $ php artisan route:list
  

Затем

 $ php artisan route:cache