【发布时间】:2015-06-01 12:08:54
【问题描述】:
大家好!
我正在开发一个 API,该 API 有一个中间件使用唯一 ID 对用户进行身份验证。在确保该用户存在后,我想将他的数据库 ID 发送到接下来的控制器,无论它是什么。
- 这是个好主意吗?还是应该在中间件完成后以某种方式获取该 ID?
- 我该怎么做?
谢谢!
【问题讨论】:
标签: laravel laravel-5 middleware
大家好!
我正在开发一个 API,该 API 有一个中间件使用唯一 ID 对用户进行身份验证。在确保该用户存在后,我想将他的数据库 ID 发送到接下来的控制器,无论它是什么。
谢谢!
【问题讨论】:
标签: laravel laravel-5 middleware
这是个好主意吗?还是应该在中间件完成后以某种方式获取该 ID?
这取决于您想要做什么以及如何声明您的路线。 路由是 Laravel 初始化的第一件事。您不能在运行时传递参数(如果我错了,请纠正我)。
另外,在所有中间件完成工作后调用的控制器。
我不能保证这是更“漂亮”的方法,但是当我想在运行时将参数传递给我的控制器时,我习惯使用 Session::flash() 或 Session::put()。
如果参数有一个请求的生命周期,我使用Session::flash(),当我希望变量在整个应用程序中更加“一致”时,我使用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();
}
}
【讨论】: