Laravel 5.6-在没有中间件的情况下在控制器外部获得经过身份验证的用户

时间:2018-06-28 00:11:17

标签: php laravel

长标题。我有一个可以在任意点初始化的单例。可能会在控制器的构造函数期间调用它,这使其无法使用auth中间件,因为它可能无法构建。

我需要从某个地方吸引用户,但我找不到解决方法。会话,请求或中间件不保证存在或被初始化。我检查了外墙,什么也没有。

我敢肯定有一种方法可以解决这个问题。也许别人比我更机智。

1 个答案:

答案 0 :(得分:0)

在遍历代码之后,这里是问题所在:

控制器通过路由器进行流水线传输,其顺序如下:

->运行控制器__construct()

->然后将其放入管道并按重要性顺序运行中间件

->然后执行其他操作(即调用index()或路由所需的任何入口点)

中间件是处理会话,请求和身份验证等的内容... 所有中间件都在控制器__construct和入口点之间运行。

因此,在控制器中,如果要执行以下操作:

__construct() {
    $this->middleware(function(Request $request, $next) {
       echo 'step 1';
    });

    echo 'step 2';

}

public function index() { echo 'step 3'; }

您会得到:

第2步<---在__construct范围内(中间件回调内部定义的任何内容在此处均不可用)。

步骤1 <-在__construct范围之外(但在index()范围之前)

第3步<-内部索引,第1步中定义的任何内容都可以在此处使用。

因此,在入口点函数中,任何需要满足这些条件的对象都可以保证存在,但除非存在于中间件回调中,否则不需要在构造函数内部。因此,您所能做的最好就是在“之间”运行代码。最后,在需要时使其可用。这里有一个限制,您可以解决它,但这很烦人。

在此之前,我无法找到一种获取用户会话的方法,我认为您必须从redis中读取它并以某种方式自己解决它,因为laravel对象还没有被填充,因为它在管道中还为时过早。 / p>

相关问题