[英]Laravel 5: The difference between Auth::guard($this->getGuard())->login($user); and auth()->login($user);
[英]Laravel form request - $this->user() vs. auth()->user() in authorization
任何人都可以通过Auth::user()
或auth()->user()
助手与$this->user()
说明是否有理由为什么我们不应该使用从请求authorize
方法中获取经过身份验证的用户docs中建议的$this->user()
方法?
https://laravel.com/docs/5.8/validation#authorizing-form-requests
就我而言,我正在尝试对表单请求进行单元测试,而auth()->user()
允许我检索用户,而$this->user()
却没有,因为我没有提出完整的请求。 我只是为测试创建表单请求对象。
public function setUp(): void
{
parent::setUp();
$this->subject = new \App\Http\Requests\OrderStoreRequest();
}
// Acting as has no effect when manually creating the orderStoreRequest object
public function testAuthorize()
{
$this
->actingAs(\factory(User::class)->create())
->assertTrue($this->subject->authorize());
}
ActingAs()
正在调用Laravel Auth系统,该系统在请求生命周期中被放入请求中( 请参阅参考资料 )。 由于您只是在没有此生命周期的情况下调用请求,因此您将永远不会注入任何请求。
为了使代码正常工作,您需要设置UserResolver。 可以这样做。
$this->subject->setUserResolver(function () use($user) {
return $user;
});
为了易于使用,我强烈建议您进行Laravel功能测试,而不要进行单元测试。 您将通过许多方法来斗争,没有Laravel生命周期就不会被称为。 您将在应用程序上执行call()和json()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.