【问题标题】:Laravel redirect to root url instead previous when validating failed验证失败时,Laravel 重定向到根 url 而不是之前的
【发布时间】:2019-07-11 18:21:08
【问题描述】:

我的 Laravel 应用程序遇到了一个关键问题。当验证失败时,Laravel 会将请求重定向到根 URL,而不是之前的。我尝试使用 FormRequest 但仍然给出相同的结果。

然后我用不同的路由检查了以前的 URL(使用 url()->previous() 方法),每次它返回根 URL...

这是会话配置文件。 (据我所知 Laravel 从会话中获取之前的 URL)

'driver' => env('SESSION_DRIVER', 'file'),
'lifetime' => env('SESSION_LIFETIME', 300),
'expire_on_close' => false,
'encrypt' => false,
'files' => storage_path('framework/sessions'),
'connection' => null,
'table' => 'sessions',
'store' => null,
'lottery' => [2, 100],
'cookie' => env(
    'SESSION_COOKIE',
    str_slug(env('APP_NAME', 'laravel'), '_').'_session'
),
'path' => '/',
'domain' => env('SESSION_DOMAIN', null),
'http_only' => true,
'same_site' => null,

我正在使用 redis 作为会话驱动程序,我已经使用 redis 作为缓存驱动程序并且它工作正常。

我正在挖掘我所做的更改,但仍然无法弄清楚导致错误的原因..

!!!

我解决了我的问题,并且元引荐来源标签导致了该问题。

<meta name="referrer" content="origin">我删除了那行,它恢复了正常。但我不认为使用origin-when-cross-origin 选项是个好方法

【问题讨论】:

  • 你说的是哪个验证?
  • 嗯,首先,这不是一个错误,其次,也许你在中间的某个地方有一个重定向,它会从会话中刷新之前的 URL。
  • 如果您使用的是表单,那么它会自动重新直接转到您的表单。
  • @BILALMALIK 表单验证

标签: php laravel


【解决方案1】:

你可以使用 Facades Validator-

使用 Illuminate\Support\Facades\Validator;

    $change= [
        'code.required' => 'Code is required',
        'xyz.required' => 'Please enter xyz'
    ];

    $validator = Validator::make($request->all(), [
        'code' => 'required',
        'api_token' => 'required',
    ], $change);

    // if validation fails 
    if ($validator->fails()) {
        //redirect here
    } else {
        //code
    }

这有帮助吗?

【讨论】:

  • 重定向时出现问题。前一个 url 指向根 url 不是实际的前一个 url
  • 我不明白你所说的“上一个 url”是什么意思.. 为什么它应该转到上一个 url,如果它失败了,那么它应该在同一个 url 上,不是吗,如果你当它失败时重定向到不同的页面,为什么它不应该被重定向?...看着你的stackoverflow统计信息,我相信你一定已经看到了你的.htaccess。 ...对不起,如果我让您更加困惑,因为我自己对您的问题感到困惑
  • 之前的 url 我的意思是 http referrer url。还有它怎么可能在同一个网址中?一个 url 用于显示 html,另一个用于商店输入。 @BILALMALIK
  • 还有一个问题是,为什么真正的问题是引荐来源网址似乎是根网址。我找不到这背后的原因
  • 我想我们会在没有代码的情况下谈论非常抽象的......我们在redirect()函数之后讨论什么吗?
【解决方案2】:

你可以使用验证器

使用验证器;

$validatior = Validator::make($request->all(), [
    'form_field_name1' => 'required',
    'form_field_name2' => 'required',
]);

if ($validatior->fails())
{
    // return to previous url
    return redirect()->back()->withInput()->withErrors($validatior);
} else {
    // Do code here
}

效果很好。

【讨论】:

    【解决方案3】:

    对我来说,解决方案是从以下位置更改 apache 标头:

    Header set Referrer-Policy: strict-origin
    

    到:

    Header set Referrer-Policy: same-origin
    

    【讨论】:

      猜你喜欢
      • 2015-06-13
      • 1970-01-01
      • 2023-01-21
      • 2016-04-03
      • 2018-06-13
      • 2016-10-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-10
      相关资源
      最近更新 更多