#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