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