在我的应用程序中,我使用多重身份验证。 (我用了 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);
}
}
我有一个成功的响应,但我知道管理员无法访问“主页”空间
我的测试有什么问题?
最佳答案
好的,经过一番努力,我终于找到了问题所在。
我使用相同的 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');
}
解决方案是
$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.
关于laravel - 在 Laravel 中测试多授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48768998/