![](/img/trans.png)
[英]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.