You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel(搭配Inertia与Vue)中存储URL参数实现登录后跳转

完整实现步骤

1. 后端捕获并存储origin参数

首先创建中间件存储合法的来源参数,避免开放重定向漏洞:
执行命令生成中间件:
php artisan make:middleware StoreOriginRedirect

编辑app/Http/Middleware/StoreOriginRedirect.php代码:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class StoreOriginRedirect
{
    public function handle(Request $request, Closure $next)
    {
        // 仅当session未存储跳转地址、且请求带origin参数时执行存储
        if ($request->has('origin') && !$request->session()->has('sso_redirect_url')) {
            // 自行维护合法来源的白名单映射,绝对不要直接使用前端传入的参数作为跳转地址
            $allowOrigins = [
                'websiteb' => 'https://www.websiteb.com/sso/callback',
                // 其他接入站点可在这里新增
            ];

            if (isset($allowOrigins[$request->query('origin')])) {
                $request->session()->put('sso_redirect_url', $allowOrigins[$request->query('origin')]);
            }
        }

        return $next($request);
    }
}

注册中间件到登录路由,编辑routes/web.php:

use App\Http\Middleware\StoreOriginRedirect;

Route::get('/login', function () {
    return Inertia::render('Auth/Login');
})->middleware(['guest', StoreOriginRedirect::class]);

2. 自定义登录成功后的跳转逻辑

修改Jetstream的登录响应配置,编辑app/Providers/JetstreamServiceProvider.php:

use Laravel\Fortify\Fortify;
use App\Providers\RouteServiceProvider;

public function boot()
{
    // 原有Jetstream配置保留,新增以下代码
    Fortify::loginResponse(function (\Illuminate\Http\Request $request) {
        // 如果存在存储的SSO跳转地址,直接跳转并销毁session中的该字段
        if ($request->session()->has('sso_redirect_url')) {
            $redirectUrl = $request->session()->pull('sso_redirect_url');
            // 你已经熟悉Inertia外部跳转方法,此处直接调用即可
            return \Inertia\Inertia::location($redirectUrl);
        }

        // 无跳转地址时走站点A默认逻辑
        return redirect()->intended(RouteServiceProvider::HOME);
    });
}

3. Vue侧适配(仅需注意异常场景)

你不需要修改登录表单的核心逻辑,Inertia默认会保留当前URL的参数,就算登录请求报错(比如密码错误),origin参数依然会保留在地址栏,下次提交请求时中间件会重新校验存储。如果要做优化,可以在Login.vue组件挂载时,把origin参数存入表单的隐藏字段,不过这一步是非必须的。

注意:所有跳转地址必须走白名单校验,禁止直接拼接前端传入的origin参数生成跳转地址,避免开放重定向安全漏洞。


内容的提问来源于stack exchange,提问作者Thbwun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:39:03