0

我刚刚开始了我的第一个 Laravel 项目,并尝试将 Jetstream Authentification 与 Voyager Admin Panel 结合起来。

首先,我在一个全新的 Laravel 安装上安装了 Jetstream,它到目前为止工作正常:

之后,我尝试添加 Voyager 为我的网站生成 CRUD,并添加了一个新用户 php artisan voyager:admin your@email.com --create

但是每当我尝试通过 url“../admin”登录时,我都会从 Jetstream 重定向到“../dashboard”。

即使我重新输入“../admin”作为 URL,我也会被重定向。只要我登录,我就无法进入 Voyager 后端。

所以我想这是某种路由/中间件问题,但我不知道是哪个问题。

在 web.php 路由文件中,只有基本的东西:

use Illuminate\Support\Facades\Route;

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

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


Route::group(['prefix' => 'admin'], function () {
    Voyager::routes();
});

不确定这是否相关,但我的 IDE 将 Voyager:: 识别为未知类,即使它在不同的 Laravel 安装中以相同的方式工作。

但是从外观上看,我希望 Route::middleware() 将键入 url“../dashboard”的登录人员重定向到仪表板视图,但仅此而已。删除这条路线也没有解决问题,所以我想我错了。

但除此之外,只剩下纯航海者路线,所以我不确定我还能从哪里解决这个问题。

4

1 回答 1

0

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

然后,在FortifyServiceProvider中绑定您的LoginResponse

您可以使用此代码

<?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);
    }
}
于 2022-02-18T14:47:37.913 回答