簡體   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