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

时间:2015-06-01 12:08:55

标签: laravel laravel-5 middleware

大家好!

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

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

谢谢!

3 个答案:

答案 0 :(得分:1)

  

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

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

另外,控制器在所有midlewares完成工作后调用。

我不能保证它更美丽"这样做的方法,但我想要在运行时将参数传递给控制器​​时使用Session::flash()Session::put()

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

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

答案 1 :(得分:0)

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

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

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

从第一个控件内调用该函数

答案 2 :(得分:0)

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

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

}