如何使用带有 url 参数和错误消息的 auth 中间件的 redirectTo 方法?

How can I use auth middleware's redirectTo method with url parameter and error message?

我想要做的就是使用 URL 和一个语言参数,它会导致我想向用户显示错误消息。如果我执行注释代码,我得到错误;

Header may not contain more than a single header, new line detected.

另一方面,如果我执行未包含在注释中的代码,则会出现错误;

Call to a member function with () on string.

我知道错误的原因。但是,我正在寻找一种解决方案来实现我的目标。

class Authenticate extends Middleware
{
    /**
     * Get the path the user should be redirected to when they are not authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string|null
     */
    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            // return \Redirect::route('login', app()->getLocale())->with('error', 'Error message');
            return route('login', ['locale' => app()->getLocale()])->with('error', 'Error message');
        }
    }
}

不能在route()方法上调用with(),因为route()方法只是returns一个字符串,不负责重定向。

如果您需要在调用 redirectTo() 方法后向用户显示错误消息,我认为您可以将错误消息保留在 Laravel Session

https://laravel.com/docs/8.x/session#interacting-with-the-session

protected function redirectTo($request)
{
    if (! $request->expectsJson()) {

        // This next line keeps the error message in session for you to use on your redirect and then deletes it from session immediately after it has been used
        $request->session()->flash('error', 'Error message!');

        return route('login', ['locale' => app()->getLocale()]);
    }
}

您现在可以像往常一样查看错误消息:

在您的控制器中:

$request->session()->get('error');

或者从您的角度来看:

{{ Session::get('error) }}

尝试你不能在 redirect() 中传递 2 个参数它接受 url 而不是路由名称

return redirect()->route('login', ['locale' => app()->getLocale()])->with('error', 'Error message');