Voyager и Jetstream: вход в панель администратора ведет на страницу панели инструментов

Я только что начал свой первый проект Laravel и пытаюсь объединить аутентификацию Jetstream с панелью администратора Voyager.

Прежде всего, я установил Jetstream на новую установку Laravel, и до сих пор это работало:

После этого я попытался добавить Voyager для создания CRUD для моего веб-сайта и добавил нового пользователя с php artisan voyager:admin your@email.com --create

Но всякий раз, когда я пытался войти через URL-адрес «../admin», меня перенаправляли на «../dashboard» из Jetstream.

Даже если я повторно ввел «../admin» в качестве URL-адреса, меня перенаправили. Пока я вошел в систему, я не могу войти в серверную часть Voyager.

Так что я предполагаю, что это какая-то проблема с маршрутизацией/промежуточным программным обеспечением, но я не могу понять, что это за проблема.

В файле маршрутизации web.php есть только основные вещи:

Не уверен, что это имеет значение, но моя IDE распознает Voyager:: как неизвестный класс, даже если он работает так же на другой установке Laravel.

Но, судя по всему, я ожидал, что Route::middleware() перенаправит вошедшего в систему человека, который вводит URL-адрес «../dashboard», в представление панели инструментов, но не более того. Удаление этого маршрута также не помогло решить проблему, так что я думаю, что ошибался.

Но помимо этого остались только чистые маршруты Voyager, поэтому я не уверен, где еще я могу найти решение этой проблемы.

2 ответа

я знаю, что уже поздно, но для других пользователей, у которых была такая же проблема.

  1. сначала я установил джетстрим
  2. int .env файл APP_URL=http://localhost:8000
  3. я установил voyager с фиктивными данными
  4. я добавил вручную в таблицу user_roles эту линию (админ)
      INSERT INTO `user_roles` (`user_id`, `role_id`) VALUES ('1', '1');

и это работает, вы можете посмотреть это видео, которое я нашел на YouTube, я думаю, оно вам поможет.

https://www.youtube.com/watch?v=UDYZx5uIwmQ

Вы можете добавить пользовательские ответы на app/Http/Responsesкаталог.

просто создайте новые ответы под названием LoginResponse

затем используйте этот код

      <?php
 
namespace App\Http\Responses;
 
use Laravel\Fortify\Contracts\LoginResponse as LoginResponseContract;
 
class LoginResponse implements LoginResponseContract
{
    /**
     * @param  $request
     * @return mixed
     */
    public function toResponse($request)
    {
        $home = auth()->user()->is_admin ? '/admin' : '/dashboard';
 
        return redirect()->intended($home);
    }
}

Затем привяжите свой LoginResponse в FortifyServiceProvider.

Вы можете использовать этот код

      <?php
namespace App\Providers;
// ...
use App\Http\Responses\LoginResponse;
use Laravel\Fortify\Contracts\LoginResponse as LoginResponseContract;
class FortifyServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        // ...
        $this->app->singleton(LoginResponseContract::class, LoginResponse::class);
    }
}
Другие вопросы по тегам