在我的应用程序中,我使用了多重身份验证。(我使用了此链接)
它有效,并且我可以以用户身份登录->我被重定向到“ / 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);
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个成功的响应,但我知道管理员无法访问“家庭”空间
我的考试有什么问题?
好的,经过一些努力,我终于找到了问题。
我使用相同的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');
}
Run Code Online (Sandbox Code Playgroud)
在这里,我们在构造函数中指定了我们需要针对admin
防护进行身份验证,但在HomeController中则不需要。
HomeController.php之前:
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
Run Code Online (Sandbox Code Playgroud)
之后的HomeController.php:
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth:web');
}
Run Code Online (Sandbox Code Playgroud)
解决方法是
$ this-> middleware('auth');
更改为
$ this-> middleware('auth:web');
现在,如果您运行测试,它将显示以下错误:
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.
Run Code Online (Sandbox Code Playgroud)