在我的应用中,我使用多重身份验证。 (我使用this link)
它有效,我可以用户身份登录 - >我被重定向到“/ home”
作为管理员,当我登录时,我被重定向到“/ admin_home”
连接后,管理员无法访问“/ home”,他被重定向到另一个页面
但是当我写这个测试时:
class AdminTest extends TestCase
{
public function setUp()
{
parent::setUp();
Artisan::call('migrate');
Artisan::call('db:seed');
}
public function tearDown()
{
Artisan::call('migrate:reset');
parent::tearDown();
}
public function testCannotAccessUserSpace()
{
$admin = Admin::find(1);
$response = $this->actingAs($admin, 'admin')
->get('/home');
$response->assertStatus(200);
}
}
我有成功的回复,但我知道管理员无法访问“主页”空间
我的测试出了什么问题?
答案 0 :(得分:4)
好的,经过一番努力,我终于找到了问题。
我使用相同的link实现了多次验证。
问题出在HomeController.php
而不是AdminTest
。
就像您在AdminController.php
构造函数中指定了身份验证后卫一样,您也必须在HomeController.php
中执行此操作。
如您所知(假设您已按照链接) AdminController.php ,就像这样:
class AdminController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth:admin');
}
在这里,我们在构造函数中指定我们需要对admin
后卫进行身份验证,但在HomeController中我们没有。
HomeController.php之前:
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
HomeController.php之后:
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth:web');
}
解决方案
$这 - >中间件( 'AUTH');
更改为
$这 - >中间件( 'AUTH:网络');
现在,如果您运行测试,它将显示以下错误:
PHPUnit 5.7.27 by Sebastian Bergmann and contributors.
F.. 3 / 3 (100%)
Time: 124 ms, Memory: 10.00MB
There was 1 failure:
1) Tests\Feature\AdminTest::testCannotAccessUserSpace
Expected status code 200 but received 302.
Failed asserting that false is true.