laravel - 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');
}
}
解决方案
我在使用 livewire 和 fortify 时遇到了同样的问题。解决方案是有一个命名的登录路由
Route::get('login', \App\Http\Livewire\Login::class)->name('login');
推荐阅读
- c++ - 即使函数 f1 没有返回任何值并且它的返回类型为 null,这段代码是如何工作的?
- webpack - Webpack:发出的块不创建主入口点
- python - 如何搜索文件并检查是否有
- javascript - 有条件的 Vuelidate 验证器
- javascript - 无法从 node.js 中的 child_process 访问数组
- r - 如何将数据框 (B) 中的列合并到数据框 (A) 中,但列 (Y) 由数据框 (A) 中另一列中的值组织?
- python - Python 3 部分总和
- java - Java开发包内部错误61003
- vhdl - 我用于实现某些 fsm 的 vhdl 代码无法正常工作
- python - 计算天体中窗口的变异系数