Промежуточное ПО Laravel: заголовок не может содержать более одного заголовка, обнаружена новая строка - PullRequest
0 голосов
/ 12 апреля 2019

Промежуточное ПО Authenticate Laravel получает путь, на который пользователи должны перенаправляться, когда они не прошли проверку подлинности, и по умолчанию перенаправляет пользователей на /login.Я хочу реализовать дополнительную функцию перенаправления пользователя с сообщением (например, время сеанса XYZ мин истекло или, пожалуйста, войдите в систему, чтобы продолжить).Так что мое Authenticate промежуточное ПО выглядит так:

namespace App\Http\Middleware;

use Illuminate\Auth\Middleware\Authenticate as Middleware;
use Illuminate\Http\Exceptions\HttpResponseException;

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
     */
    protected function redirectTo($request)
    {
        if($request->is('api/*'))
        {
            throw new HttpResponseException(response()->error(['failure_reason'=>'Fresh Access Token Required'], 'Unauthorized Request', 401));  
        }

        if (!$request->expectsJson()) {
            // return route('login');
            $request->headers->set('Accept', 'application/json');
            return redirect("/login")->with("message", "Exceeded an inactivity period of over 15 mins. Kindly re-login to continue");
        }

    }

}

С или без $request->headers->set('Accept', 'application/json');, я продолжаю получать эту ошибку: Заголовок не может содержать более одного заголовка, обнаружена новая строка .Любые идеи о том, как решить эту проблему?

1 Ответ

1 голос
/ 12 апреля 2019

С предложениями @ ourmandave и [https://laracasts.com/discuss/channels/laravel/method-redirectto-with-a-flash-message][2], я узнал, что redirectTo () хочет вернуть имя маршрута перенаправления, а не перенаправление.Таким образом, вы должны высветить «сообщение» вашей сессии, а затем вернуть перенаправление «/ login».Поэтому я отредактировал мой код, чтобы он выглядел так, как показано ниже, и теперь он работает:

namespace App\Http\Middleware;

use Illuminate\Auth\Middleware\Authenticate as Middleware;
use Illuminate\Http\Exceptions\HttpResponseException;

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
     */
    protected function redirectTo($request)
    {
        if($request->is('api/*'))
        {
            throw new HttpResponseException(response()->error(['failure_reason'=>'Fresh Access Token Required'], 'Unauthorized Request', 401));  
        }

        if (!$request->expectsJson()) {
            session()->flash('message', 'Exceeded an inactivity period of over 15 mins. Kindly re-login to continue'); 
            return route('login');
        }

    }

}  
...