Ada*_*dam 3 php phpunit laravel-5
我的应用程序中有两个不同的用户对象,一个App\User和一个App\Admin。对于两者,我都有不同的身份验证保护。
我的默认守卫是web模型守卫App\User,我也有admin模型守卫App\Admin。
例如,这段代码
$admin = factory(\App\Admin::class)->make();
\Auth::guard('admin')->login($admin);
dd([\Auth::check(), \Auth::guard('admin')->check()]);
Run Code Online (Sandbox Code Playgroud)
返回
[假,真]
正如预期的那样。
但是,在我的功能测试中,我正在这样做:
$admin = factory(\App\Admin::class)->make();
$response = $this->actingAs($admin, 'admin')
->get('/admin');
dd([\Auth::check(), \Auth::guard('admin')->check()]);
Run Code Online (Sandbox Code Playgroud)
这出于某种原因返回
[真实,真实]
这会导致各种错误(例如,我有一个普通用户的日志中间件,并尝试将管理员存储为普通用户会引发外键异常等)。
为什么同时actingAs启用两个守卫?这是 Laravel 5.6 中的错误还是我做错了什么?
当您调用actingAs方法时,Laravel 将默认保护更改为admin内部(在这种情况下)。
请使用下面的代码
$defaultGuard = config('auth.defaults.guard');
$admin = factory(\App\Admin::class)->make();
$this->actingAs($admin, 'admin');
\Auth::shouldUse($defaultGuard);
$response = $this->get('/admin');
dd([\Auth::check(), \Auth::guard('admin')->check()]);
Run Code Online (Sandbox Code Playgroud)
您也可以actingAsAdmin在TestCase类中提取一个方法,以便您可以重用该函数。
public function actingAsAdmin($admin) {
$defaultGuard = config('auth.defaults.guard');
$this->actingAs($admin, 'admin');
\Auth::shouldUse($defaultGuard);
return $this;
}
Run Code Online (Sandbox Code Playgroud)
并像下面这样调用这个函数。
$admin = factory(\App\Admin::class)->make();
$response = $this->actingAsAdmin($admin)->get('/admin');
dd([\Auth::check(), \Auth::guard('admin')->check()]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
635 次 |
| 最近记录: |