Laravel 5 - 中间件获取用户 ID 并发送给控制器
Laravel 5 - Middleware get user ID and send to controllers
大家好!
我正在开发一个 API,它有一个使用唯一 ID 验证用户身份的中间件。在确定这个用户存在后,我想将他的数据库 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();
}
}
大家好!
我正在开发一个 API,它有一个使用唯一 ID 验证用户身份的中间件。在确定这个用户存在后,我想将他的数据库 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();
}
}