[英]Is it advisable to bind application data to request in Laravel 5
如果我在中间件中进行身份验证并将一些数据添加到\\Illuminate\\Http\\Request $request
对象并通过将< \\Illuminate\\Http\\Request $request
注入控制器方法在控制器中使用该数据,这是否可取?
原因是,应用程序需要进行数据库调用以查明凭据是否有效,如果是,则返回类似我在后续数据库操作中使用的主键。
目前,一切都在控制器中完成。 如果我要使用单独的中间件进行身份验证,如果中间件检查通过,我可以将我的控制器所需的数据绑定到请求对象吗? 如果是的话,我应该怎么做呢?
灵感 - Expressjs通过一堆中间件/路由绑定和传递数据的方式。
我不明白 - 你为什么不使用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身份验证器包,同时使用旧系统进行身份验证。 在您的中间件中,您可以执行以下操作:
if (doLegacyCheckHere()) {
Auth::loginUsingId(1);
}
这意味着您可以通过neo4j图形数据库进行检查 - 如果它返回true
表示用户已正确认证 - 那么您只需将它们自己登录到Laravel系统即可。
是的,这可能是一个很好的方法,因为内置的Laravel身份验证系统的工作方式相同:您可以通过$request::user()
访问登录用户。 请参阅http://laravel.com/docs/5.0/authentication#retrieving-the-authenticated-user
可以在中间件中验证auth。 在我的应用程序中,我们使用相同的功能来检查用户是否发送了正确的access_code来访问API方法。 甚至Laravel本身也通过Authenticate中间件处理受保护的路由。
问题是,没有关于如何或在何处存储其他数据的灵丹妙药。
一种方法是将其存储在用户的会话中。
第二种是使用Illuminate\\Foundation\\Application
类本身。 您可以将其注入中间件__constructor()
并使用它来保存数据。 Application
类扩展了实现ArrayAccess接口的Container类,允许您访问它的属性,就像它是一个数组一样。 这样,您不仅可以从应用程序中获取变量,还可以存储它们。 虽然最简单,但不是最好的方法。
public function __construct(\Illuminate\Foundation\Application $app)
{
$app['_foo'] = 'bar';
}
还有更多这样的黑客,但这些是最简单的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.