【问题标题】:Laravel middleware creates redirect loopLaravel 中间件创建重定向循环
【发布时间】:2020-02-19 16:17:36
【问题描述】:

我正在使用内部 API 在 Laravel 中进行身份验证,并且我创建了一个中间件来测试用户是否使用 session.log 登录。中间件在重定向到登录路由时工作,但它一直在尝试重定向,直到我看到 ERR_TOO_MANY_REDIRECTS。这是我第一次使用不同的方式进行身份验证,我删除了我之前使用的 de guestauth 中间件。

这是我的路线:

Route::get('/login', 'ApiController@index')->name('login')->middleware('psa');
Route::post('/logout', 'ApiController@destroy')->name('logout');
Route::post('/auth', 'ApiController@login')->name('psaAuth');

中间件:

public function handle($request, Closure $next)
    {
        if(! $request->session()->exists('login')){
            return redirect('/login');
        }else{
            return redirect('/');
        }

        return $next($request);
    }

任何想法为什么会发生这种情况?

【问题讨论】:

  • 您可以检查位于 storage/logs/laravel*.log 中的日志文件,看看是否有任何错误。还提供控制器方法体以获得帮助
  • 您的中间件用于路由/login,如果登录会话不存在,您将再次重定向它,这显然是一个循环。

标签: php laravel


【解决方案1】:

由于您只为/login 应用psa 中间件,因此您的代码应如下所示

public function handle($request, Closure $next)
{
    if($request->session()->exists('login')){
        return redirect('/');
        // If session exist, take him to home page
    }

    // Else let him stay in the login page for login.
    return $next($request);
}

【讨论】:

    猜你喜欢
    • 2018-04-24
    • 1970-01-01
    • 2018-05-28
    • 2016-03-16
    • 2017-02-11
    • 2014-06-02
    • 2015-05-16
    • 2015-08-04
    • 2013-06-01
    相关资源
    最近更新 更多