【问题标题】:Laravel 5 - Middleware get user ID and send to controllersLaravel 5 - 中间件获取用户 ID 并发送到控制器
【发布时间】:2015-06-01 12:08:54
【问题描述】:

大家好!

我正在开发一个 API,该 API 有一个中间件使用唯一 ID 对用户进行身份验证。在确保该用户存在后,我想将他的数据库 ID 发送到接下来的控制器,无论它是什么。

  • 这是个好主意吗?还是应该在中间件完成后以某种方式获取该 ID?
  • 我该怎么做?

谢谢!

【问题讨论】:

    标签: laravel laravel-5 middleware


    【解决方案1】:

    这是个好主意吗?还是应该在中间件完成后以某种方式获取该 ID?

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

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

    我不能保证这是更“漂亮”的方法,但是当我想在运行时将参数传递给我的控制器时,我习惯使用 Session::flash()Session::put()

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

    我不知道我是否清楚,告诉我:)

    【讨论】:

    • 您好,感谢您的回答。我不认为使用 sessins 适合我——我只想在中间件中获取一些数据,然后将这些数据提供给后面的控制器!
    • 然后,您可以在中间件中执行以下操作: $request->merge(['user_id' => $userId]);在您的控制器中,您必须在第一个参数中获取 Request $requst 然后执行以下操作: $request->input('user_id');但是,没有办法在运行时动态地将参数传递给控制器​​。
    【解决方案2】:

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

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

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

    【讨论】:

    • 您好,感谢您的回答。我没有使用 Laravel 的身份验证,我使用的是自定义 Oauth 服务器,因此中间件会收到一个令牌并获取用于 Oauth 服务器的用户唯一 ID。然后我想向 users 表发出请求以获取该用户的真实自动递增 ID。我猜我可以在中间件中做到这一点,但是如何将值传递给之后的控制器?
    【解决方案3】:

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

    <?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();
        }
    
    }
    

    【讨论】:

    • 您好,感谢您的回答。我没有使用 Laravel 的身份验证,我使用的是自定义 Oauth 服务器,因此中间件会收到一个令牌并获取用于 Oauth 服务器的用户唯一 ID。然后我想向 users 表发出请求以获取该用户的真实自动递增 ID。我猜我可以在中间件中做到这一点,但是如何将值传递给之后的控制器?
    猜你喜欢
    • 1970-01-01
    • 2016-03-27
    • 2016-05-06
    • 1970-01-01
    • 2016-04-03
    • 2020-10-14
    • 2016-04-01
    • 2022-12-05
    • 2018-09-12
    相关资源
    最近更新 更多