繁体   English   中英

Laravel表单请求-授权中的$ this-> user()与auth()-> 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM