首页 > 解决方案 > Laravel 8路由登录未定义

问题描述

我在 Laravel 8 中的身份验证中间件遇到了一些问题。目前,当我运行测试时,我得到了错误Symfony\Component\Routing\Exception\RouteNotFoundException: Route [login] not defined

我已经安装jetstream并且可以在我的文件夹livewire中看到这些。routes我的测试应该重定向到login,因为没有用户登录。我假设这是一个问题,middleware('auth')没有去它需要的地方,但我找不到任何关于如何解决它的信息。

这是我的测试:

<?php

namespace Tests\Feature;

use App\Models\Project;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;

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 Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| 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', [App\Http\Controllers\HomeController::class, 'index'])->name('home');

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

项目控制器

<?php

namespace App\Http\Controllers;

use App\Models\Project;
use App\Models\User;

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');
    }
}

标签: laravel

解决方案


我在使用 livewire 和 fortify 时遇到了同样的问题。解决方案是有一个命名的登录路由

Route::get('login', \App\Http\Livewire\Login::class)->name('login');

推荐阅读