是否可以将应用程序数据绑定到Laravel 5中的请求

时间:2015-04-13 12:09:08

标签: php laravel middleware

如果我在中间件中进行身份验证并将一些数据添加到\Illuminate\Http\Request $request对象并通过将\Illuminate\Http\Request $request注入控制器方法在控制器中使用该数据,那么这是明智的吗?

原因是,应用程序需要进行数据库调用以查明凭据是否有效,如果是,则返回类似我在后续数据库操作中使用的主键。

此刻,一切都在控制器中完成。如果我要使用单独的中间件进行身份验证,如果中间件检查通过,我可以将我的控制器所需的数据绑定到请求对象吗?如果是的话,我应该怎么做呢?

灵感 - Expressjs通过一堆中间件/路由在请求中绑定和传递数据的方式。

3 个答案:

答案 0 :(得分:6)

我不明白 - 你为什么不使用Laravel身份验证器?

你说:

  

原因是,应用程序需要进行数据库调用以查明凭据是否有效,如果是,则返回类似我在后续数据库操作中使用的主键。

这正是Laravel Authenticator的作用吗?

然后在你的控制器中你可以做到

`auth()->user()` // gives you the user record
`auth()->id()` // user_id from the DB
`auth()->user()->name` // gives you the `name` column off the record. You can change it to anything.

编辑:同时 - 在使用旧系统进行身份验证时,您仍然可以使用Laravel Authenticator程序包。在您的中间件中,您可以执行以下操作:

if (doLegacyCheckHere()) {
      Auth::loginUsingId(1);
}

这意味着您可以通过neo4j图形数据库进行检查 - 如果它返回true用户已正确认证 - 那么您只需将它们自己登录到Laravel系统。

答案 1 :(得分:2)

是的,这可能是一种很好的方法,因为内置的Laravel身份验证系统的工作方式相同:您可以通过$request::user()访问登录用户。见http://laravel.com/docs/5.0/authentication#retrieving-the-authenticated-user

答案 2 :(得分:1)

可以在中间件中验证auth。在我的应用程序中,我们使用相同的功能来检查用户是否发送了正确的access_code来访问API方法。甚至Laravel本身也通过Authenticate中间件处理受保护的路由。

问题是,没有关于如何或在何处存储其他数据的灵丹妙药。

一种方法是将其存储在用户的会话中。

第二种是使用public void saveSite(ISite siteObj){ Assert.notNull(siteObj); merge((Site) siteObj); } 类本身。您可以将其注入中间件Illuminate\Foundation\Application并使用它来保存数据。 __constructor()类扩展了实现ArrayAccess接口的Container类,允许您访问它的属性,就像它是一个数组一样。这样,您不仅可以从应用程序中获取变量,还可以存储它们。虽然最简单,但不是最好的方式。

Application

还有更多这样的黑客,但这些是最简单的。