Laravel 8 jetstream烟囱惯性。登录后重定向到主页,而不是用户选择

Laravel 8 jetstream烟囱惯性。登录后重定向到主页,而不是用户选择,laravel,inertiajs,Laravel,Inertiajs,发生在我身上的是,如果用户输入url:project.test/med,系统将重定向到Login,但它不会重定向到dashboard,而是重定向到med。在RedirectIfAuthenticated中,表达式Auth::guard($guard)->check()没有计算,或者至少在日志中没有显示,因此我无法确定发生了什么 /** RedirectIfAuthenticated.php */ public function handle($request, Closure $next

发生在我身上的是,如果用户输入url:project.test/med,系统将重定向到Login,但它不会重定向到dashboard,而是重定向到med。在RedirectIfAuthenticated中,表达式Auth::guard($guard)->check()没有计算,或者至少在日志中没有显示,因此我无法确定发生了什么

/** RedirectIfAuthenticated.php */
    public function handle($request, Closure $next, ...$guards)
    {
       $guards = empty($guards) ? [null] : $guards;
       Log::info($request);
       Log::info(Auth::user());
       foreach ($guards as $guard) {
         Log::info(Auth::guard($guard)->check());
         Log::info(Auth::check());
         if (Auth::guard($guard)->check()) {
            return redirect(RouteServiceProvider::HOME);
         }
      }
      Log::info(Auth::check());
      Log::info('end');
      return $next($request);
    }

    /** web.php */
     Route::middleware(['auth:sanctum', 'verified'])->get('/dashboard', function () {
         return Inertia\Inertia::render('Dashboard');
    })->name('dashboard');
    
    Route::middleware(['auth:sanctum','verified'])->get('/med', function (Request $request) {
         return Inertia\Inertia::render('Med');
    })->name('med');

RedirectIfAuthenticated
中间件的功能与您认为的不同。此中间件检查用户在尝试访问连接有
guest
中间件的路由时是否经过身份验证。因此,在您登录到应用程序并尝试访问
/login
路由后,该中间件将拦截请求并将用户重定向到
路由服务提供商::HOME
路径


尽管如此,在撰写本文时,Laravel Fortify无法轻松修改用户注册或登录应用程序后重定向的位置

要想让它发挥作用,你必须经过几个步骤

步骤1-创建新的LoginResponse类 在应用程序中的任何位置创建一个
LoginResponse
类并实现
Laravel\Fortify\Contracts\LoginResponse


有一个更简单的解决方案

如果查看
config/forty.php
,您将看到home变量设置为:

'home' => RouteServiceProvider::HOME,
这是指
app/Providers/RouteServiceProvider.php

因此,要在用户登录后将其重定向到主页,只需更改home变量:

public const HOME = '/';
这样做稍微不那么复杂,并且省去了创建一个全新的登录响应类的麻烦

如果更改不能立即生效,请尝试运行:

php artisan optimize
转到config/fortify.php并修改此行:

'home' => RouteServiceProvider::HOME,
致:


只需在config文件夹中打开fortify

搜索“主页”=>RouteServiceProvider::主页

并替换它,但您的代码逻辑和不要忘记添加身份验证外观

use Illuminate\Support\Facades\Auth;
就像是:

'home' => function () {
    $is_active = Auth::user()->is_active;
    $role = Auth::user()->role;
   
    if ($is_active == 1) {
        if ($role== 1) {
            return '/admin/dashboard';   
        } else {
            return '/';
        }
    } else {
        return '/login';
    }
},

您使用的是Laravel jetstream吗?是的,我刚刚编辑了标题Lei get Target class[App\Http\Responses\LoginResponse]不存在,您知道可能有什么问题吗?@GeorgeSharvadze如果您所有操作都正确,并且出现此错误,则可能是composer没有更新。只需运行
composer dump autoload
,它将重新加载所有类。@Raphael Cunha对此非常感谢。你还知道注册后如何重定向到另一个站点吗?我不想重定向到jetstream的仪表板。提前谢谢!这是正确的方法。你能分享一些“重定向选项”的例子吗?我不能让它工作是的,当然!,我已经更新了答案。遵循同样的规则会导致
preg_match()期望参数2是字符串,对象在寄存器路由中给定。
'home' => function () {
    $is_active = Auth::user()->is_active;
    $role = Auth::user()->role;
   
    if ($is_active == 1) {
        if ($role== 1) {
            return '/admin/dashboard';   
        } else {
            return '/';
        }
    } else {
        return '/login';
    }
},