Laravel 5 - 中间件获取用户 ID 并发送给控制器

Laravel 5 - Middleware get user ID and send to controllers

大家好!

我正在开发一个 API,它有一个使用唯一 ID 验证用户身份的中间件。在确定这个用户存在后,我想将他的数据库 ID 发送到接下来的控制器,以哪个为准。

谢谢!

Is that a good idea ? Or should I get that ID somehow after the middleware finished ?

这取决于你想做什么以及你如何声明路由。 路由是 Laravel 初始化的第一件事。您不能在 运行 时间传递参数(如果我错了请纠正我)。

此外,控制器在所有中间件完成工作后调用。

我不能保证这是更 "beautiful" 的方法,但我习惯做的是在我想将参数传递给我时使用 Session::flash()Session::put() 运行 次控制器。

如果参数只有一个请求生命周期,我使用 Session::flash(),当我希望变量在整个应用程序中更多 'consistent' 时,我使用 Session::put()

不知道我说清楚了没有,告诉我:)

好吧,只要您不通过 HTTP 协议发送该 ID,就应该没问题,因为用户将无法篡改数据。

就是说,如果您正在使用 Laravel 的内置 Auth 模块,您应该只在另一个控制器上执行 Auth::user() 调用,它会给您经过身份验证的用户。

如果这不是一个选项,您应该在另一个接受 $id 作为参数的控制器中创建一个函数。您可以通过 $secondController = App->make(SecondController) 然后 $secondController->receiverFunction($id)

构建第二个控制器,从第一个控件中调用该函数

如果您希望当前经过身份验证的用户在您的应用程序中可用,只需将其添加到您的基本控制器中:

<?php namespace App\Http\Controllers;

use Illuminate\Contracts\Auth\Guard;

abstract class Controller {

    protected $auth;
    protected $currentUser;

    public function __construct(Guard $auth)
    {
        $this->auth = $auth;
        $this->currentUser = $this->auth->user();
    }

}