在 Laravel 中无效后防止重定向到主页

Posted

技术标签:

【中文标题】在 Laravel 中无效后防止重定向到主页【英文标题】:Prevent redirect to homepage after invalid in Laravel 【发布时间】:2017-01-10 20:10:36 【问题描述】:

我正在使用 Laravel 5.3 开发一个 RESTful API,因此我正在使用我的控制器测试一些功能和请求。我需要做的一件事是在我的数据库中添加字段之前验证我的用户发送的请求,因此,我使用自定义 FormRequest 来验证它。

当我在 Postman 中测试我的 API 并发送无效请求时,响应会将我重定向到主页。阅读文档后,我发现了以下语句

如果验证失败,将生成重定向响应以发送 用户回到他们之前的位置。错误也会一闪而过 到会话,以便它们可以显示。如果请求是 一个 AJAX 请求,一个带有 422 状态码的 HTTP 响应将是 返回给用户,包括验证的 JSON 表示 错误。

如何防止这种情况发生?还是 Postman 中有 AJAX 模式?有什么建议吗?

【问题讨论】:

【参考方案1】:

我在 Laravel 8 中遇到了同样的问题。在您的请求类中,您可以覆盖 failedValidation 方法。

<?php

...
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Exceptions\HttpResponseException;


class RegisterRequest extends FormRequest


    ...

    protected function failedValidation(Validator $validator)
    
        throw new HttpResponseException(response()->json(['errors' => $validator->errors()], 422));
    

    ...



【讨论】:

【参考方案2】:

这也可以在不覆盖任何函数的情况下实现。 Laravel 旨在支持 Json 和普通页面。 请更改您在postman 中的设置并将Accept 设置为application/json,如下所示

Laravel 很聪明 ;-)

【讨论】:

如果这个东西记录在 laravel 文档中,你能分享一下链接吗?它真的很有帮助。 如果请求不包含任何在 api 中也可以工作的接受标头,我们如何强制执行此操作 哇。这对我有用。从来没想过。这就是 laravel 安全性很棒的原因。【参考方案3】:

您的自定义 FormRequest 扩展了 Illuminate\Foundation\Http\FormRequest。内部是一个执行重定向的函数,称为response()。只需在您的自定义 FormRequest 中覆盖此函数即可更改无效验证的响应方式。


namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\JsonResponse;

class CustomFormRequest extends FormRequest

    /**
     * Custom Failed Response
     *
     * Overrides the Illuminate\Foundation\Http\FormRequest
     * response function to stop it from auto redirecting
     * and applies a API custom response format.
     *
     * @param array $errors
     * @return JsonResponse
     */
    public function response(array $errors) 

        // Put whatever response you want here.
        return new JsonResponse([
            'status' => '422',
            'errors' => $errors,
        ], 422);
    

【讨论】:

以上是关于在 Laravel 中无效后防止重定向到主页的主要内容,如果未能解决你的问题,请参考以下文章

如果尝试进入登录屏幕,Laravel 5 会重定向到主页

如果 URL 无效,如何重定向到主页?

访问 url.com/public 时 Laravel .htaccess 重定向到主页

Laravel 5.2 如何将所有 404 错误重定向到主页

当我尝试访问主页时,Laravel 不会重定向到登录页面

如何强制将所有 404(或每个页面,无论是不是无效)重定向到主页?