Laravel 5.4 If 语句在 __construct() 中不起作用

Laravel 5.4 If statement doesn't work in __construct()

基本上这是我的 __construct 我的控制器。当未登录的用户尝试访问此控制器中的路由时,他基本上被重定向到 login 路由。到目前为止一切顺利 - 如果条件正常,重定向正常,路由正常。

所以接下来我尝试检查用户访问令牌是否有效,如果不是,我会将他重定向到 logout 路由 - 为了简化我的示例,我不这样做但是相反,我检查 $test_var 是否等于 1 并重定向到 login 因为我们已经知道这个路由名称是有效的。

第一个 if($test_var == 1),第二个 if($test_var == 1) 触发器 - 没有重定向或死亡。

我什至试过 if(1==1) ..

我什至尝试过:

 if(isset($this->userCredentials))
         return redirect('login');

它仍然没有触发。这真的很奇怪,好像我没有先登录 if(!isset... 正在工作并重定向,但是如果我登录,这段代码什么都不做:

看起来 If 是问题所在,但这显然超出了量子理论..

这是构造的完整代码:

namespace App\Http\Controllers;

use Input; 
use Session;
use Auth;
use Redirect;

class WhosebugController extends ConnectionController
{

public function __construct()
{
    $this->middleware('auth');


    $this->userCredentials = Session::get('userCredentials');


    if(!isset($this->userCredentials))
        return redirect('login');

    $test_var = 1;

    if($test_var == 1)
        return redirect('login');

    if($test_var == 1)
        die(1);

    if(1 == 1)
        die(1);
}

我认为,如果语句有效,问题将出在重定向中。至少在 L4.2 中我遇到了同样的问题,只是重定向不起作用。

在 laravel 4.2 中可以使用 send(),但我还没有在 L5 中使用它,所以请尝试它是否有效:

return redirect('login')->send();

您的会话未加载。将您的控制器 __construct 编辑为

$this->middleware(function ($request, $next) {
  $this->userCredentials = Session::get('userCredentials');

  if(!isset($this->userCredentials))
    return redirect('login');

  $test_var = 1;

  if($test_var == 1)
    return redirect('login');

  if($test_var == 1)
    die(1);

  if(1 == 1)
    die(1);

  return $next($request);
});

或将您的 app\Http\Kernel.php 更改为

protected $middleware = [
  ...
  \Illuminate\Session\Middleware\StartSession::class,
];

将您的登录路径命名为 login 然后试试这个:

重定向()->路由('login');