gpt4 book ai didi

php - Laravel 表单请求 - 授权中的 $this->user() 与 auth()->user()

转载 作者:行者123 更新时间:2023-12-04 17:31:45 25 4
gpt4 key购买 nike

谁能解释一下我们不应该在来自请求中获取经过身份验证的用户的原因 authorize方法,通过 Auth::user()auth()->user() helper vs. $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 系统,该系统在请求生命周期中被放入请求 ( See )。由于您只是在没有此生命周期的情况下调用您的请求,因此您永远不会将任何内容注入(inject)请求中。

为了让您的代码正常工作,您需要设置 UserResolver。这可以像这样完成。

$this->subject->setUserResolver(function () use($user) {
return $user;
});

为了便于使用,我强烈建议您进行 Laravel 功能测试而不是单元测试。你会通过很多方法来争取自己的方式,没有 Laravel 生命周期就不会被调用。您将在应用程序上执行 call() 和 json() 。

关于php - Laravel 表单请求 - 授权中的 $this->user() 与 auth()->user(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59007857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com